zoukankan      html  css  js  c++  java
  • JMS-ActiveMQ-SpringBoot

    一、队列

    1.1 队列生产者

    1.1.1 pom.xml文件

    依赖:

    <dependencies>
        <!--springboot和activemq整合-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
            <version>2.5.3</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    

    1.1.2 application.yml文件

    # 端口
    server:
      port: 8081
    
    spring:
      activemq:
        broker-url: tcp://192.168.10.100:61616
        user: admin
        password: admin
      jms:
        pub-sub-domain: false     # false = queue(不写默认)    true = topic
    
    # 自定义队列名称
    myqueue: boot-activemq-queue
    

    1.1.3 配置Bean

    @Component
    @EnableJms  //开启jms注解
    public class ConfigBean {
    
        @Value("${myqueue}")
        private String myQueue;
    
        @Bean
        public Queue queue(){
            return new ActiveMQQueue(myQueue);
        }
    }
    

    1.1.4 QueueProducer生产者

    @Component
    public class QueueProducer {
    
        @Autowired
        private JmsMessagingTemplate jmsMessagingTemplate;
        @Autowired
        private Queue queue;
    
        public void produceMsg(){
            jmsMessagingTemplate.convertAndSend(queue,"***生产者:"+ UUID.randomUUID().toString().substring(0,7));
        }
    }
    

    1.1.5 主启动类MainAppProducer

    @SpringBootApplication
    public class ActiveMq05SpringbootApplication {
        public static void main(String[] args) {
            SpringApplication.run(ActiveMq05SpringbootApplication.class, args);
        }
    }
    

    1.1.6 测试

    @SpringBootTest(classes = ActiveMq05SpringbootApplication.class)
    @RunWith(SpringJUnit4ClassRunner.class)
    @WebAppConfiguration
    public class ActiveMq05SpringbootApplicationTests {
    
        @Resource    //  这个是java 的注解,而Autowried  是 spring 的
        private QueueProducer queue_produce ;
    
        @Test
        public  void testSend() throws Exception{
            queue_produce.produceMessage();
        }
    
    }
    

    1.1.7 新需求

    每个3秒往MQ推送消息,以下定时发送Case,案列修改

    • 修改QueueProducer,新增定时投递方法
    @Component
    public class QueueProducer {
    
        @Autowired
        private JmsMessagingTemplate  jmsMessagingTemplate ;
    
        @Autowired
        private Queue queue ;
    
        // 调用一次一个信息发出
        public void produceMessage(){
            jmsMessagingTemplate.convertAndSend(queue,"springboot-mq-生产者:"+ UUID.randomUUID().toString().substring(0,6));
        }
    
        //间隔时间3秒定投
        @Scheduled(fixedDelay = 3000)
        public void produceMsgScheduled(){
            jmsMessagingTemplate.convertAndSend(queue,"定时发送:"+UUID.randomUUID().toString().substring(0,6));
        }
    }
    
    • 修改主启动类
    @SpringBootApplication
    @EnableScheduling
    public class ActiveMq05SpringbootApplication {
        public static void main(String[] args) {
            SpringApplication.run(ActiveMq05SpringbootApplication.class, args);
        }
    }
    
    • 直接开启主启动类,间隔发消息OK

    1.2 队列消费者

    1.2.1 pom.xml文件

    依赖:

    <dependencies>
        <!--springboot和activemq整合-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
            <version>2.5.3</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    

    1.2.2 application.yml文件

    server:
      port: 8888
    
    spring:
      activemq:
        broker-url: tcp://192.168.10.100:61616
        user: admin
        password: admin
      jms:
        pub-sub-domain: false      # false = queue    true =  topic
    
    #  自定义队列名称
    myqueue: boot-activemq-queue
    

    1.2.3 QueueConsumer类

    @Component
    public class QueueConsumer {
    
        @JmsListener(destination = "${myqueue}")
        public void receive(TextMessage textMessage) throws JMSException {
            System.out.println("====>消费者收到消息:"+textMessage.getText());
        }
    }
    

    1.2.4 主启动类

    @SpringBootApplication
    public class ActiveMq05SpringbootConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ActiveMq05SpringbootConsumerApplication.class, args);
        }
    }
    

    二、发布订阅

    2.1 Topic生产者

    2.1.1 pom.xml文件

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
            <version>2.5.3</version>
        </dependency>
        <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</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    
    </dependencies>
    

    2.1.2 application.yml文件

    server:
      port: 6666
    
    spring:
      activemq:
        broker-url: tcp://192.168.10.100:61616
        user: admin
        password: admin
      jms:
        pub-sub-domain: true      # false = queue    true =  topic
    
    #  自定义队列名称
    myTopic: boot-activemq-topic
    

    2.1.3 配置Bean

    @Component
    public class ConfigBean {
        @Value("${myTopic}")
        private String topicName;
    
        @Bean
        public Topic topic(){
            return new ActiveMQTopic(topicName);
        }
    }
    

    2.1.4 TopicProducer

    @Component
    public class TopicProducer {
        @Autowired
        private JmsMessagingTemplate jmsMessagingTemplate;
        @Autowired
        private Topic topic;
    
        @Scheduled(fixedDelay = 3000)
        public void produceTopic(){
            jmsMessagingTemplate.convertAndSend(topic,"主题消息:"+ UUID.randomUUID().toString().substring(0,6));
        }
    }
    

    2.1.5 主启动类

    @SpringBootApplication
    @EnableScheduling
    public class ActiveMq06BootTopicProducerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ActiveMq06BootTopicProducerApplication.class, args);
        }
    }
    

    2.2 Topic消费者

    2.2.1 pom.xml文件

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
            <version>2.5.3</version>
        </dependency>
        <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</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    
    </dependencies>
    

    2.2.2 application.yml文件

    server:
      port: 5555
    
    spring:
      activemq:
        broker-url: tcp://192.168.10.100:61616
        user: admin
        password: admin
      jms:
        pub-sub-domain: true      # false = queue    true =  topic
    
    #  自定义队列名称
    myTopic: boot-activemq-topic
    

    2.2.3 TopicConsumer

    @Component
    public class TopicConsumer {
    
        @JmsListener(destination = "${myTopic}")
        public void receive(TextMessage textMessage){
            try {
                System.out.println("消费者收到订阅主题:"+textMessage.getText());
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }
    

    2.2.4 主启动类

    @SpringBootApplication
    public class ActiveMq06BootTopicConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ActiveMq06BootTopicConsumerApplication.class, args);
        }
    
    }
    
  • 相关阅读:
    转载:ORA-01438: 值大于为此列指定的允许精度
    PLSQL碰到pls-00103的错误解决办法
    spring 的xml配置使用p标签简化
    spring aop实现拦截接口请求打印日志
    response 设置头的类型 (转)
    js或者ext js获取返回值
    ext grid 前台grid加载数据碰到数据重复只显示一条
    关于struts和Spring 结合到一起之后存在ACtion创建单实例还是多
    SVN提交碰到的问题奇怪的问题
    关于项目使用可配置的properties 文件的实现
  • 原文地址:https://www.cnblogs.com/jsit-dj-it/p/15142669.html
Copyright © 2011-2022 走看看