消息中间件学习四--ActiveMq与SpringBoot集成

1.消息队列的点对点,发布订阅

   第一种:点对点模式分析(也叫队列模式)

      

 

    流程:   

activemq消息发送流程:
  1.消息生产者把消息发送到activemq消息服务器进行存储
    1)消息生产者发送消息,首先需要在activemq消息服务器中开辟一块空间,存储消息
    2)并且必须给这块空间起一个标识,用来唯一标识这块消息空间

2.消息消费者必须监听这块空间(此空间监听方法是根据空间标识监听的),
监听空间标识必须和消息生产标识一致
注:消息消费者主动拉取消息

 

 

  

   特点:点对点消息模式的特点:
             1.一条消息只能被一个消费者接收。
             2.一条消息被消费后就消失了。
             3.如果这条消息一致没有被消费,那就一直等待,直到被消费为止。
             4.如果有多个消费者同时监听消息空间,遵循先来后到的原则,谁第一个拉取,就给谁消费。

  第二种:发布/订阅模式

       图解:

         

         

 

2.搭建

  第一步:引入ActiveMq依赖(pom.xml)    

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
 </dependency>

  

添加热部署
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
  <version>2.0.6.RELEASE</version>
</dependency>

 

第二步:ActiveMq 配置

   application.properties

 

spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.in-memory=true
spring.activemq.pool.enabled=false
##开启发布订阅模式,Springboot默认Queues,采用代码配置
#spring.jms.pub-sub-domain=true

MqConfig.java(配置订阅者或者点对点)

 

/**==============================================================================================
 * 消息订阅分为:普通订阅,持久订阅
 * 普通订阅 :activemq只是向当前启动的消费者发送消息。
 * 持久订阅 :记录消费者的信息,实现离线消息的推送
 *
 *
 *
 *===============================================================================================
 * DESC:activeMq 配置
 * USER:hmily
 * DATE:2017/12/28
 * TIME:14:11
 */
@Configuration
public class MqConfig {

    @Autowired
    private ActiveMQConnectionFactory connectionFactory;

    /**发布定义模式Topic**/
    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerTopic() {
        DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
        bean.setPubSubDomain(true);
        bean.setConnectionFactory(connectionFactory);
        return bean;
    }


    /**点对点Queue**/
    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerQueue() {
        DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
        bean.setConnectionFactory(connectionFactory);
        return bean;
    }

}

 

第三步:使用

  Producer

  

 /**springBoot ActiveMq 模版**/
    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

   /**
    * 产生Topic
    **/
    @Test
    public void testTopic(){
        Destination topic = new ActiveMQTopic("topic.test");
        jmsMessagingTemplate.convertAndSend(topic,"hello topic");
    }

   /**
    * 产生Queue
    **/
    @Test
    public void testQueue(){
        Destination queue = new ActiveMQQueue("queue.test");
        jmsMessagingTemplate.convertAndSend(queue,"hello queue");
    }

Consumer(重点是配置监听JmsListener)

/**
 * DESC:消息消费者
 * USER:hmily
 * DATE:2017/12/28
 * TIME:14:32
 */
@Service
public class DemoConsumer {

    @JmsListener(destination = "topic.test", containerFactory = "jmsListenerContainerTopic")
    public void testTopicCusumer(String test){
        System.out.println(test);
    }

    @JmsListener(destination = "queue.test", containerFactory = "jmsListenerContainerQueue")
    public void testQueueCusumer(String test){
        System.out.println(test);
    }
}

 

学习来源:https://www.jianshu.com/p/715537657af6

                  https://www.jianshu.com/p/a546ed0c3f09

                  https://www.jianshu.com/p/66286e89573d

posted @ 2020-09-22 15:06  小窝蜗  阅读(132)  评论(0编辑  收藏  举报