JMS及它的一个实现ActiveMQ使用实例
JMS是什么
首先,JMS的全称是Java Message Service,Java消息服务。它是Java为所有的消息队列而创建的一种规范,目的是使开发者可以使用同样的API去调用不同的消息中间件。
在WEB应用开发中,会有很多的消息中间件,它们之间各有各的特点,但是在Java中使用这些消息中间件的时候如果没有一种同一个规范,可能就会导致ActiveMQ有一套自己的API,RabbitMQ有一套自己的API 等等,不同的消息中间件使用的是不同的API,这对于Java开发者来说是一件非常痛苦的事情,因为你要根据不同的消息中间件,去学习不同使用方法,所以Java就为我们提供了JMS这种通用的接口,它规定了,所有的消息中间件要想在Java中使用,都要按照JMS的规定去开发自己的API,这样Java开发者就可以非常轻松的使用同样的API去调用不同的消息中间件。
JMS中的其中角色
- JMS提供者:也就是ActiveMQ,RabbitMQ,Kafka等这些实现了JMS的提供商
- JMSk客户: 也就是使用JMS去发布消息或者消费消息的应用程序。如JMS生产者和消费者都是客户。
- JMS生产者: 也就是专门用来生产消息的客户。
- JMS消费者: 也就是专门用来消费消息的客户。
- JMS消息: JMS客户之间传递的数据
- JMS队列: 容纳发送数据的一个容器。队列中的消息一旦被阅读,就会从该队列中移除
- JMS主题: 一种支持,一条消息可以使多个消费者接受的机制
JMS中的两种模型
一、 点对点模型Queue(或称队列模型)
二、 发布订阅模型Topic(或称主题模型)
这两种模型的区别,将在下面用ActiveMQ使用示例中用代码说明。
ActiveMQ实例
Topic 发布订阅模型消息消费方代码
|
|
Topic 发布订阅模型消息发送方代码
|
|
Queue 点对点模型消息消费方代码
|
|
Queue 点对点模型消息发送方代码
|
|
ActiveMQ实例使用总结
点对点模式 与 发布订阅模式的区别
1.点对点模式,一条消息只能被一个消费者消费; 而发布订阅模式,一条消息可以被多个消费者消费。
2.点对点模式,消息发送者设置消息模式为持久模式Delivery.PERSISTENT后,消费者即使不在线。同样能够接受到下线期间的消息; 而发布订阅模式下,只有消息发送者设置为持久下次,并且,消息订阅者(也就是消息消费者)设置为持久订阅者才可以接受到下线期间的消息(配置方式见代码)。
值得注意的地方
1.同一个Session下消息的接受方式只能使用一种,要么使用Listener,要么手动receive。
2.持久订阅者必须设置一个唯一的ClientID,并且必须在没有创建会话之前设置。因为持久订阅者是根据clientID来发送消息的,如果没有clientid,mq则不知道该向谁发送这条消息。