昨天用了一天时间了解了一下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特点:
每个消息只有一个消费者,意思就是说,消息一旦被消费,消息就不再在存在于消息队列中。
发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列。
- Pub/Sub(1对N通讯,N>=0):
发布者(发送消息方)将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。
Pub/Sub特点:
1对N通讯。
发布者和订阅者之间有时间上的依赖性。就是说没有发布者就是没有订阅者。
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)即可实现跨平台。
啊噶啦哇呀!吃饭时间,放下奶茶~