消息形式

点对点

Message Queue —- Sender —- Receive
存储消息 —- 发送消息 —- 接收消息
此模式中,一条消息只能被一个消费者消费,没有被消费的,只能留在队列中,等待被消费,或者超时

发布/订阅方式

用于多接收客户端的方式,并且接收端和发送端存在时间上的依赖
一个接收端只能接收他创建之后发送客户端发送的消息
作为subscriber,在接收消息时有两种方法,destination的receive方法和实现 message listener 接口的 onMessage方法

基本流程

发送消息:

  1. 创建连接使用的工厂类 JMS ConnectionFactory
  2. 使用管理对象 JMS ConnectionFactory 建立连接 Connection,并启动
  3. 使用连接 Connection 建立会话 Session
  4. 使用会话 Sesssion 和管理对象 Destination 创建消息生产者 MessageSender
  5. 使用消息生产者 MessageSender 发送消息

    接收消息

  6. 创建连接使用的工厂类 JMS ConnectionFactory

  7. 使用管理对象 JMS ConnectionFactory 建立连接 Connection,并启动
  8. 使用连接 Connection 建立会话 Session
  9. 使用会话 Sesssion 和管理对象 Destination 创建消息接收者 MessageReceiver
  10. 使用消息接受者 MessageReceiver 接收消息,需要用 setMessageListener 将 MessageListener接口绑定到 MessageReceiver。消息接收者必须实现了 MessageListener 接口,需要定义 onMessage 事件方法

    在springboot中使用ActiveMQ

    1. @Component
    2. public class MessageQueue {
    3. @Bean
    4. public Queue queue(){
    5. return new ActiveMQQueue("test-message");
    6. }
    7. @Bean
    8. public Topic topicQueue(){
    9. return new ActiveMQTopic(guicTopic);
    10. }
    11. }
    1. @Component
    2. public class MessageProduction {
    3. @Autowired
    4. private JmsMessagingTemplate jmsMessagingTemplate;
    5. @Autowired
    6. private Queue queue;
    7. public void send() {
    8. jmsMessagingTemplate.convertAndSend(queue, "message");
    9. }
    10. }
    1. @Component
    2. public class MessageListener{
    3. @JmsListener(destination = "test-message")
    4. public void removeMessage(String msg){
    5. System.out.println(msg);
    6. }
    7. }

    ```java @SpringBootApplication @EnableJms public class ActiveMQApplication {

} ```