JMS-ActiveMQ

来源:互联网 发布:mac上能玩的网游 编辑:程序博客网 时间:2024/06/05 15:14

昨天用了一天时间了解了一下JMS(Java Message Service,Java消息服务)嗯嗯感觉这东西感觉蛮好玩的。


JMS是什么鬼呢?

JMS是一个用于提供消息服务的技术规范,它制定了在整个消息服务提供过程中的所有数据结构和交互流程。

噢?(不明白??喝杯奶茶!)

就是说,大家可以把JMS理解成Java平台上的一个标准或者说是一个协议。该标准或协议制定了两个应用程序之间,或分布式系统中如何发送消息,进行异步通信的规则。这样子就好理解多了~


ActiveMQ又是什么鬼

噢?

那ActiveMQ又是什么鬼,为啥标题写成JMS-ActiveMQ,两者有什么关系吗?哈哈!你别说,两者可真有关系。

JMS通常用于企业级应用的消息传递,主要以Point-to-Point(P2P)、Publish/Subscribe(Pub/Sub)两种通讯模式进行消息传递。而ActiveMQ则是一个JMS的实现, 是Apache出品的开源消息总线,其中MQ(Message Queue,消息队列)表示的是,该实现是一种应用程序对应用程序的通信方法,是面向消息中间件(MOM)的最终实现,是真正的服务提供者。

MQ实现的通讯方法正是上面所提及的P2P、Pub/Sub通讯机制,至于怎么实现的呢?我们来看看这两个通讯模式的模式图:

  • P2P(1对1通讯):

每个消息都被发送者发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。

这里写图片描述

P2P特点:

  1. 每个消息只有一个消费者,意思就是说,消息一旦被消费,消息就不再在存在于消息队列中。

  2. 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列。

    • Pub/Sub(1对N通讯,N>=0):

发布者(发送消息方)将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。

这里写图片描述

Pub/Sub特点:

  1. 1对N通讯。

  2. 发布者和订阅者之间有时间上的依赖性。就是说没有发布者就是没有订阅者。


java具体实现

说这么多,光懂理论没啥用,还不如实践一下~。

前面我们讨论过JMS只是服务接口,并没有给予实现,实现JMS接口的消息中间节成正是ActiveMQ。

JMS编程:

对象/接口 主要内容 ConnectionFactory 连接工厂,JMS用它创建连接。 Connection JMS客户端到ActiveMQ的连接。 Destination 消息的目的地。既是消息生产者的消息发送目标(QUEUE/TOPIC)或消息消费者的消息来源(QUEUE/TOPIC)。 Session Session会话,老生常谈了,一个发送或接收消息的就事句柄。 MessageProducer 由Session对象创建的用来发布送消息的对象。 MessageConsumer 由Session对象创建的用来接收消息的对象。 Acknowledge 签收。 Transaction 事务。

JMS-ActiveMQ VS WebSocket

噢?

了解过WebSocket的朋友肯定会问,JMS-ActiveMQ与WebSocket有什么不同呀。大家都能实现某种通讯功能。

WebSocket协议实时通信技术原理:
http://blog.csdn.net/for_anmin/article/details/78549226

从概念来说,WebSocket是 HTML5的一种传输协议,实时,全双工通信,长连接,实现前台向后台,后台向前台发出请求。ActiveMQ是消息中间件,主要实现是队列,用于处理消息,用于跨平台、分布式或跨应用进行消息通讯。但是。。。(But…),ActiveMQ 5.9版后支持基于AMQP、MQTT、OpenWire、Stomp,WS这5种协议的通讯,其中WS既是WebSocket。就是说,我们可以通过Web端进行Java的跨平台或跨应用通讯了。

备注:

跨平台/跨应用:不同OS的电脑只要配备Java的运行环境(JVM)即可实现跨平台。


啊噶啦哇呀!吃饭时间,放下奶茶~

原创粉丝点击