美文网首页
activeMQ-10整合springboot

activeMQ-10整合springboot

作者: 誓俭草 | 来源:发表于2020-02-06 19:46 被阅读0次

    1)首先创建springboot项目,创建一个maven的web项目,然后引入依赖

     <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.4.RELEASE</version>
            <relativePath/>
        </parent>
    

    然后修改打包方式

     <groupId>com.jjclub</groupId>
      <artifactId>springboot-activeMQ</artifactId>
      <packaging>jar</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>springboot-activeMQ Maven Webapp</name>
      <url>http://maven.apache.org</url>
    

    完整pom文件如下:

    <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/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
       <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.4.RELEASE</version>
            <relativePath/>
        </parent>
      <groupId>com.jjclub</groupId>
      <artifactId>springboot-activeMQ</artifactId>
      <packaging>jar</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>springboot-activeMQ Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <dependencies>
       <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>
            </dependency>
            <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-activemq</artifactId>
    </dependency>
    <dependency>
         <groupId>org.apache.activemq</groupId>
         <artifactId>activemq-pool</artifactId>
         <version>5.14.5</version>
    </dependency>
      </dependencies>
      <build>
        <finalName>springboot-activeMQ</finalName>
      </build>
    </project>
    

    添加启动类

    package com;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.scheduling.annotation.EnableScheduling;
    import org.springframework.stereotype.Component;
    
    
    @SpringBootApplication
    @Component("com")
    @EnableScheduling
    public class SpringStart {
        public static void main(String[] args) {
            SpringApplication.run(SpringStart.class, args);
        }
    }
    

    2)添加application.yml;配置服务端口以及activemq地址,队列和主题的名称

    server:
      port: 8080
      context-path: /pro
    spring:
      activemq:
        user: admin
        password: admin
        broker-url: tcp://localhost:61616
        pool:
          enabled: true
          max-connections: 10
    queueName: publish.queue
    topicName: publish.topic
    

    3)添加activeMQ配置类,对队列和主题进行配置

    package com.toll;
    
    import javax.jms.Queue;
    import javax.jms.Topic;
    
    import org.apache.activemq.ActiveMQConnectionFactory;
    import org.apache.activemq.command.ActiveMQQueue;
    import org.apache.activemq.command.ActiveMQTopic;
    import org.springframework.beans.factory.annotation.Value;
    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 {
    
        @Value("${queueName}")
        private String queueName;
    
        @Value("${topicName}")
        private String topicName;
        @Value("${spring.activemq.user}")
        private String usrName;
    
        @Value("${spring.activemq.password}")
        private  String password;
    
        @Value("${spring.activemq.broker-url}")
        private  String brokerUrl;
    
        @Bean
        public Queue queue(){
            return new ActiveMQQueue(queueName);
        }
    
        @Bean
        public Topic topic(){
            return new ActiveMQTopic(topicName);
        }
    
        @Bean
        public ActiveMQConnectionFactory connectionFactory() {
            return new ActiveMQConnectionFactory(usrName, password, brokerUrl);
        }
    
        
        @Bean//
        public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ActiveMQConnectionFactory connectionFactory){
            DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
            bean.setConnectionFactory(connectionFactory);
            return bean;
        }
    
        @Bean
        public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ActiveMQConnectionFactory connectionFactory){
            DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
            //设置为发布订阅方式, 默认情况下使用的生产消费者方式
            bean.setPubSubDomain(true);
            bean.setConnectionFactory(connectionFactory);
            return bean;
        }
    }
    

    4)编写生产者

    package com;
    
    
    import java.util.Date;
    
    import javax.jms.Queue;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jms.core.JmsMessagingTemplate;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    @Component
    public class PublishController {
        @Autowired
        private JmsMessagingTemplate jms;
    
        @Autowired
        private Queue queue;
        
        @Scheduled(fixedDelay = 5000) //上一次执行完毕时间点之后5秒再执行
        public void sendqueue(){
           jms.convertAndSend(queue,"消息是"+new Date());
           System.out.println("消息发送");
        }
    }
    

    5)编写消费者

    package com.toll;
    
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.TextMessage;
    
    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.stereotype.Service;
    
    @Service
    public class BootSonsumer {
    
        @JmsListener(destination="${queueName}")
        public void msg(Message message) throws JMSException {
            System.out.println("收到的消息为:"+((TextMessage)message).getText());
        }
    }
    

    相关文章

      网友评论

          本文标题:activeMQ-10整合springboot

          本文链接:https://www.haomeiwen.com/subject/vfduxhtx.html