SpringBoot整合Artemis

依赖引入

        <dependency>
            <groupId>org.messaginghub</groupId>
            <artifactId>pooled-jms</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-artemis</artifactId>
        </dependency>

application.properties:

spring.artemis.mode=native
spring.artemis.host=你的Artemis服务器IP
spring.artemis.port=61616
spring.artemis.user=root
spring.artemis.password=root
spring.artemis.pool.enabled=true
spring.artemis.pool.max-connections=50
spring.artemis.embedded.enabled=false

 发送消息:面向JmsTemplate编程

package cc.mq;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;

/**
 * @author 张家琛
 * @version 1.0
 * @date 2023/1/22 20:21
 */
@Service
public class MessageService {
    private final JmsTemplate jmsTemplate;

    @Autowired
    public MessageService(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

    //p2p模型
    public void produce(String message) {
        this.jmsTemplate.setPubSubDomain(false);
        this.jmsTemplate.convertAndSend("myQueue", message);
    }

    //pub-sub模型
    public void publish(String message) {
        this.jmsTemplate.setPubSubDomain(true);
        this.jmsTemplate.convertAndSend("myTopic", message);
    }
}

接收消息

Spring Boot会自动将@JmsListener注解修饰的方法注册为消息监听器,如果没有显示配置监听器容器工厂,此时Spring Boot会自动配置一个监听器容器工厂。

监听消息队列的监听器

package cc.mq;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

/**
 * @author 张家琛
 * @version 1.0
 * @date 2023/1/22 20:53
 */
@Component
public class QueueListener {
    //表示监听myQueue消息队列
    @JmsListener(destination = "myQueue")
    public void processMessage(String content){
        System.out.println("接收到消息:"+content);
    }
}

Spring Boot的消息监听器总是监听消息队列,监听消息主题得为@JmsListener注解指定containerFactory属性,设置使用自定义的监听器容器工厂。

自定义监听器容器工厂

package cc.mq.config;

import org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;

import javax.annotation.Resource;
import javax.jms.ConnectionFactory;

/**
 * @author 张家琛
 * @version 1.0
 * @date 2023/1/22 20:57
 */
@Configuration
public class JmsConfig {
    @Bean
    @Resource
    public DefaultJmsListenerContainerFactory myFactory(DefaultJmsListenerContainerFactoryConfigurer configurer
            , ConnectionFactory connectionFactory) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        configurer.configure(factory, connectionFactory);
        //设置成Pub-Sub消息模型!!!
        factory.setPubSubDomain(true);
        return factory;
    }
}

然后再进行配置监听消息主题监听器

package cc.mq;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

/**
 * @author 张家琛
 * @version 1.0
 * @date 2023/1/22 20:56
 */
@Component
public class TopicListener {
    @JmsListener(destination = "myTopic", containerFactory = "myFactory")
    public void processMessage(String content) {
        System.out.println("收到主题消息:" + content);
    }
}

然后启动服务器,对服务器发送请求,我这用的浏览器直接访问

 消息发送出去了

监听器也接收到了

 

 再试试消息主题监听

发送消息:

没问题也成功发送成功了并接收到了 

 

 

 


版权声明:本文为weixin_53132064原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。