• springboot使用activemq同时接收queue和topic消息


    原文链接:https://blog.csdn.net/jia_costa/article/details/79354478

    新建springboot项目, pom文件如下

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <groupId>com.example</groupId>
    <artifactId>activemq-test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    
    <name>activemq-test</name>
    <description></description>
    
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.10.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    </properties>
    
    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    </dependency>
    </dependencies>
    
    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    </plugins>
    </build>
    
    
    </project>

    配置类

    package com.example.config;
    
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    
    import org.apache.activemq.command.ActiveMQQueue;
    import org.apache.activemq.command.ActiveMQTopic;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
    import org.springframework.jms.config.JmsListenerContainerFactory;
    
    @Configuration
    public class ActivemqConfig {
    
    /**
    * 自定义了4个Destination,两个queue,两个topic
    */
    @Bean
    public Destination queue1() {
    return new ActiveMQQueue("queue-1");
    }
    
    @Bean
    public Destination queue2() {
    return new ActiveMQQueue("queue-2");
    }
    
    @Bean
    public Destination topic1() {
    return new ActiveMQTopic("topic-1");
    }
    
    @Bean
    public Destination topic2() {
    return new ActiveMQTopic("topic-2");
    }
    
    /**
    * JmsListener注解默认只接收queue消息,如果要接收topic消息,需要设置containerFactory
    */
    @Bean
    public JmsListenerContainerFactory<?> topicListenerContainer(ConnectionFactory activeMQConnectionFactory) {
    DefaultJmsListenerContainerFactory topicListenerContainer = new DefaultJmsListenerContainerFactory();
    topicListenerContainer.setPubSubDomain(true);
    topicListenerContainer.setConnectionFactory(activeMQConnectionFactory);
    return topicListenerContainer;
    }
    
    }
    
    controller
    
    package com.example.controller;
    
    import javax.annotation.Resource;
    import javax.jms.Destination;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
    * 通过页面访问的方式生产消息
    */
    @RestController
    public class ProviderController {
    
    @Autowired
    private JmsTemplate jmsTemplate;
    
    @Resource(name = "queue1")
    private Destination queue1;
    
    @Resource(name = "topic1")
    private Destination topic1;
    
    @GetMapping("/send/queue1")
    public String send1() {
    jmsTemplate.convertAndSend(queue1, "hello queue-1");
    return "ok";
    }
    
    @GetMapping("/send/topic1")
    public String send2() {
    jmsTemplate.convertAndSend(topic1, "hello topic-1");
    return "ok";
    }
    
    }

    接收消息

    package com.example.message;
    
    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.stereotype.Component;
    
    /**
    * 接收处理消息
    */
    @Component
    public class MessageHandler {
    
    @JmsListener(destination="queue-1")
    public void recieve1(String message) {
    System.out.println("###################" + message + "###################");
    }
    
    @JmsListener(destination="topic-1", containerFactory="topicListenerContainer")
    public void recieve2(String message) {
    System.out.println("###################" + message + "###################");
    }
    
    }

    配置文件application.properties

    spring.activemq.broker-url=tcp://192.168.32.128:61616

    启动类

    package com.example;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class ActivemqTestApplication {
    
    public static void main(String[] args) {
    SpringApplication.run(ActivemqTestApplication.class, args);
    }
    }

    访问http://localhost:8080/send/queue1或者http://localhost:8080/send/topic1,可以看到控制台的输出

  • 相关阅读:
    定时器QTimer
    QDoubleSpinBox浮点型数字调节框
    pyqt5-步长调节器
    字体选择框QFontComboBox
    组合框-下拉选择框QCombox
    复选框QCheckBox
    CMake学习记录--list(列表操作命令)
    CMake命令之list
    make的link_directories命令不起作用
    Linux平台用C++实现事件对象,同步线程
  • 原文地址:https://www.cnblogs.com/fswhq/p/10845356.html
Copyright © 2020-2023  润新知