欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Boot 之整合ActiveMQ实现

程序员文章站 2022-04-27 18:48:33
...

对于信息交互,mq是个很好的实现者。相当于订阅者和消费者的模式。一个广播消息发送,我们听众信息接收。或者单对单的模式,一方发送消息,一方接收。用的交广的还是广播模式。今天就记一下ActiveMQ在spring boot中的整合实现。
首先,引进依赖包:

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

其次,在配置文件中配置mq的相关信息:

//mq的安装服务器及端口号
spring.activemq.broker-url=tcp://111.11.11.11:61616
spring.activemq.in-memory=true  
spring.activemq.password=admin
spring.activemq.user=admin
spring.jms.pub-sub-domain=true
spring.activemq.pool.enabled=false

相关工具类如下:

@Component
public class SpringApplicationContextUtil implements ApplicationContextAware {
    private static Logger logger = Logger
            .getLogger(SpringApplicationContextUtil.class);
    private static ApplicationContext applicationContext;

    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        logger.info("setApplicationContext=======" + applicationContext);
        SpringApplicationContextUtil.applicationContext = applicationContext;
    }

    public static ApplicationContext getApplicationContext() {
        return SpringApplicationContextUtil.applicationContext;
    }

}

服务者实现:

@Component
public class Provider {

//  @Autowired
//  private JmsMessagingTemplate jmsMessagingTemplate;

    public void send() {
        JmsMessagingTemplate jmsMessagingTemplate = (JmsMessagingTemplate)SpringApplicationContextUtil.getApplicationContext().getBean("jmsMessagingTemplate");
//      Destination destination = new ActiveMQQueue("helloWorld");
       //发送消息
        String message = "hello,everyone ,this is test!";
        //发送主题
        Topic topic = new ActiveMQTopic("helloWorld");
        //开始生产发送消息
        jmsMessagingTemplate.convertAndSend(topic, message);
    }
}

消费者实现

/**
 * 监听MQ消息
 *
 */
@Component
public class ChannelStoreConsumer {

    /**
     * logger
     */
    Logger logger = LoggerFactory.getLogger(this.getClass());


    //必须有此注解进行监听主题为helloWorld的消息
    @JmsListener(destination = "helloWorld")
    public void receiveMessage(String msg) {
        logger.info("storeResultService 接收消息" + msg);
    }
}

如此,一个生产者消费者的demo就实现了,当然,一般情况下,生产者和消费者是在不同的项目里,毕竟它的作用就是实现消息传递的嘛。