ActivaMQ與SpringBoot結合

之前我們介紹了ActivaMQ與Spring結合,這裏我們再來看一看更加簡便的與SpringBoot的結合使用。首先但是還是需要引入其相關的依賴,如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-pool</artifactId>
    <version>5.15.7</version>
</dependency>

之前由於我們在介紹ActivaMQ與Spring結合結合時,在父項目引入了activemq-all的依賴,然後就導致了一直報slf4j包的衝突,這裏記得不需要在引入activemq-all的依賴了


然後爲了代碼容易理解,這裏我們在SpringBoot的項目下,又新建了兩個模塊,一個用於消息的生產,一個用於消息的消費,項目結構如下:
在這裏插入圖片描述


這裏我們先來查看消息的生產者代碼模塊producer,首先我們在application.yml裏面配置了ActiveMQ的相關信息

server:
  port: 8081

spring:
  activemq:
    broker-url: tcp://127.0.0.1:61616
    user: admin
    password: admin
    pool:
      enabled: true
      max-connections: 10

然後我們就需要配置一個ActiveMQ的配置類 —— ActiveMqConfig

@Configuration
@EnableJms
public class ActiveMqConfig {

    @Value("${spring.activemq.user}")
    private String user;

    @Value("${spring.activemq.password}")
    private String password;

    @Value("${spring.activemq.broker-url}")
    private String brokerUrl;

    @Bean
    public ConnectionFactory connectionFactory(){
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
        connectionFactory.setUserName(user);
        connectionFactory.setPassword(password);
        connectionFactory.setBrokerURL(brokerUrl);
        return connectionFactory;
    }

}

上述的配置文件applicationContext.yml和配置類ActiveMqConfig其實在消息的消費者模塊consumer中,其內容也是一樣的,只不過其服務啓動的端口號不同,不然就無法同時啓動了,其餘內容一致,所以就不重複展示了。


接着我們繼續來看消費生產者模塊producer,這裏我們主要來看看是如何發送消息的,如下:

@Component
public class QueueProducer {

    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    @Autowired
    private JmsTemplate jmsTemplate;    //可用於做更細緻的處理

    public void sendMsg(Destination destination, String message){
        
        jmsMessagingTemplate.convertAndSend(destination, message);
        
        jmsTemplate.send(destination, new MessageCreator() {
            @Override
            public Message createMessage(Session session) throws JMSException {
                TextMessage textMessage = session.createTextMessage();
                textMessage.setText(message);
                return textMessage;
            }
        });
    }
}

然後我們就在測試類中進行測試,消息生產者測試類ProducerTest如下:

@SpringBootTest(classes = ProducerApplication.class)
@RunWith(SpringRunner.class)
public class ProducerTest {

    @Autowired
    private QueueProducer queueProducer;

    @Test
    public void testQueueProducer(){
        Destination destination = new ActiveMQQueue("springboot.queue");
        queueProducer.sendMsg(destination, "Hello Queue");
    }
}



最後當然就是需要看一看在consumer模塊中,消息消費者是如何獲取消息進行消費的,如下:

@Component
public class QueueConsumer {

    @JmsListener(destination = "springboot.queue")
    public void receiveMsg(String text){
        System.out.println(text);
    }
}

是不是特別的簡單,我們只需要加上@JmsListener註解即口,需要注意的是,我們如果想要監聽多個消息目的地的時候,我們就可以直接在方法上加上多個@JmsListener註解,該註解時運行重複添加多個的,當然也可以使用@JmsListeners來包含多個。


最後就是我們的測試結果,我們發現消費到了兩條消息,因爲我們在上述使用了不同的方法發送了兩次消息
在這裏插入圖片描述




上述我們講述的是ActiveMQ點對點的模式,肯定還有另一種主題Topic模式,那麼我們就來將上述的例子改爲Topic的模式


首先我們下來看消息的生產者,有哪些需要修改的,其實只需要修改我們的測試類即可,就是在創建消息目的地的方法需要修改,如下:
在這裏插入圖片描述


然後就是需要修改消息的消費者了,消費者修改稍微複雜一些,首先我們需要的配置類ActiveMqConfig中,添加有關Topic的配置,如下:
在這裏插入圖片描述

然後我們在對方法加上監聽註解@JmsListener 時,主要添加剛剛我們添加的配置Bean,如下:
在這裏插入圖片描述

上述就完成了在SpringBoot下,使用ActiveMQ進行Topic模式的使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章