zoukankan      html  css  js  c++  java
  • 七、SpringBoot整合ActiveMQ

    一、queue

      新建Spring Boot项目

    1.1、queue生产者

    • pom.xml

    <?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>
       <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>2.1.5.RELEASE</version>
          <relativePath/> <!-- lookup parent from repository -->
       </parent>
       <groupId>com.at.boot.activemq</groupId>
       <artifactId>boot_mq_produce</artifactId>
       <version>1.0-SNAPSHOT</version>
    
    
       <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <maven.compiler.source>1.8</maven.compiler.source>
          <maven.compiler.target>1.8</maven.compiler.target>
       </properties>
    
       <dependencies>
          <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
          </dependency>
          <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
    
          <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter</artifactId>
          </dependency>
          <!--spring boot整合activemq的jar包-->
          <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-activemq</artifactId>
             <version>2.1.5.RELEASE</version>
          </dependency>
       </dependencies>
    
       <build>
          <plugins>
             <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
             </plugin>
          </plugins>
       </build>
    </project>
    • application.yml
    # web占用的端口
    server:
      port: 7777
    
    spring:
      activemq:
        # activemq的broker的url
        broker-url: tcp://192.168.17.3:61616
        # 连接activemq的broker所需的账号和密码
        user: admin
        password: admin
      jms:
        # 目的地是queue还是topic, false(默认) = queue    true =  topic
        pub-sub-domain: false
    
    #  自定义队列名称。这只是个常量
    myqueue: boot-activemq-queue
    • 配置目的地的bean
    // 让spring管理的注解,相当于spring中在xml 中写了个bean
    @Component
    // 开启jms适配
    @EnableJms
    public class ConfigBean {
    
            // 注入配置文件中的 myqueue
            @Value("${myqueue}")
            private String myQueue ;
    
            @Bean   // bean id=""  class="…"
            public ActiveMQQueue queue(){
                 return  new ActiveMQQueue(myQueue);
            }
    }
    • 队列生产者代码
    @Component
    public class Queue_Produce {
    
        // JMS模板
        @Autowired
        private JmsMessagingTemplate  jmsMessagingTemplate ;
    
        // 这个是我们配置的队列目的地
        @Autowired
        private Queue queue ;
    
        // 发送消息
        public void produceMessage(){
            // 一参是目的地,二参是消息的内容
            jmsMessagingTemplate.convertAndSend(queue,"****"+ UUID.randomUUID().toString().substring(0,6));
        }
    
        // 定时任务。每3秒执行一次。非必须代码,仅为演示。
        @Scheduled(fixedDelay = 3000)
        public void produceMessageScheduled(){
            produceMessage();
        }
    }
    • 主启动类(非必须,仅为演示)
    @SpringBootApplication
    // 是否开启定时任务调度功能
    @EnableScheduling
    public class MainApp_Produce {
        public static void main(String[] args) {
            SpringApplication.run(MainApp_Produce.class,args);
        }
    }
    • 单元测试(非必须,仅为演示)
    // 加载主类
    @SpringBootTest(classes = MainApp_Produce.class)
    // 加载spring的junit
    @RunWith(SpringJUnit4ClassRunner.class)
    // 加载web
    @WebAppConfiguration
    public class TestActiveMQ {
    
        @Resource    //  这个是java 的注解,而Autowried 是 spring 的
        private Queue_Produce  queue_produce ;
    
    //  这个是java 的注解,而Autowried 是 spring 的
        @Test
        public  void testSend() throws Exception{
            queue_produce.produceMessage();
        }

    1.2、queue消费者

      pom.xml和application.yml文件和前面一样。唯一不同就是下面代码

    @Component
    public class Queue_consummer {
    
        // 注册一个监听器。destination指定监听的主题。
        @JmsListener(destination = "${myqueue}")
        public void receive(TextMessage textMessage) throws  Exception{
            System.out.println(" ***  消费者收到消息  ***"+textMessage.getText());
        }
    }

    二、topic

    2.1、topic生产者

    • pom.xml

      和上面一样。

    • application.yml

    server:
      port: 6666
    spring:
      activemq:
        broker-url: tcp://192.168.17.3:61616
        user: admin
        password: admin
      jms:
        # 目的地是queue还是topic, false(默认) = queue    true =  topic
        pub-sub-domain: true
    
     #  自定义主题名称
    mytopic: boot-activemq-topic
    • 配置目的地的bean和开启JMS功能
    @Component
    @EnableJms
    public class ConfigBean {
    
        @Value("${mytopic}")
        private String  topicName ;
    
        @Bean
        public Topic topic() {
            return new ActiveMQTopic(topicName);
        }
    }
    • 生产者代码
    @Component
    public class Topic_Produce {
    
        @Autowired
        private JmsMessagingTemplate  jmsMessagingTemplate ;
    
        @Autowiredjava
        private Topic  topic ;
    
        @Scheduled(fixedDelay = 3000)
        public void produceTopic(){
            jmsMessagingTemplate.convertAndSend(topic,"主题消息"+ UUID.randomUUID().toString().substring(0,6));
        }
    }

    2.2、topic消费者

      pom.xml和pplication.yml和上面一样。

    • 消费者代码

    @Component
    public class Topic_Consummer {
    
        @JmsListener(destination = "${mytopic}")
        public void receive(TextMessage textMessage) throws  Exception{
            System.out.println("消费者受到订阅的主题:"+textMessage.getText());
        }
    }
  • 相关阅读:
    Tomcat安装(安装版)
    Selenium自动化测试(一)之环境搭建
    Windows快速启动应用高效搜索文件工具-Listary
    Python3之jsonpath使用和json转换
    Python3操作SQLite数据库
    初识面向对象
    忘记虚拟机中Linux的登录密码解决办法
    win10自带虚拟机的使用(Hyper-v)
    nigx下配置tp5.1路由
    PHP无限极菜单
  • 原文地址:https://www.cnblogs.com/jdy1022/p/14270794.html
Copyright © 2011-2022 走看看