首页 > 编程语言 > 详细

SpringBoot整合-Queue

时间:2020-08-11 16:00:54      阅读:353      评论:0      收藏:0      [点我收藏+]

生产者

技术分享图片

新建Maven工程

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
    <version>2.3.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2.yml文件

# springboot 启动端口
server:
  port: 8080
# activeMQ配置
spring:
  activemq:
    broker-url: tcp://112.124.20.231:61616 # activeMQ服务器ip
    user: admin
    password: admin
  # 指定连接队列还是主题
  jms:
    pub-sub-domain: false # false = Queue | true = Topic
# 自己定义队列名称
myQueueName: springboot-activemq-queue

3.配置bean—类似Spring的ApplicationContext.xml文件

@Component
@EnableJms //开启Springboot 的Jms
public class ConfigBean {
    @Value("${myQueueName}")
    private String myQueueName;

    @Bean
    public ActiveMQQueue queue(){
        //创建一个ActiveMQQueue
        return new ActiveMQQueue(myQueueName);
    }
}

4.Queue_Producer

@Component
public class Queue_Producer {
    //JmsMessagingTemplate是Springboot的Jms模板,Spring的是JmsTemplate
		@Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    //把ConfigBean类的ActiveMQQueue注入进来
		@Autowired
    private ActiveMQQueue activeMQQueue;

    //发送Queue的方法
    public void producerMsg(){
        jmsMessagingTemplate.convertAndSend(activeMQQueue,"*************"+ UUID.randomUUID().toString());
    }
}

或者去掉@Autowired,用构造注入对象

@Component
public class Queue_Producer {
    //JmsMessagingTemplate是Springboot的Jms模板,Spring的是JmsTemplate
    private JmsMessagingTemplate jmsMessagingTemplate;

    //把ConfigBean类的ActiveMQQueue注入进来
    private ActiveMQQueue activeMQQueue;

    //发送Queue的方法
    public void producerMsg(){
        jmsMessagingTemplate.convertAndSend(activeMQQueue,"*************"+ UUID.randomUUID().toString());
    }
		//构造注入对象(推荐)
		    public Queue_Producer(JmsMessagingTemplate jmsMessagingTemplate, ActiveMQQueue activeMQQueue) {
		        this.jmsMessagingTemplate=jmsMessagingTemplate;
		        this.activeMQQueue = activeMQQueue;
		    }
}

5. 主启动类

@SpringBootApplication
public class BootMqProducerApplication {

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

}

6.单元测试

@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class TestActiveMQ {
    @Autowired
    private Queue_Producer queue_producer;

    @Test
    public void testSend(){
        queue_producer.producerMsg();
    }
}

7. 新需求要求每3秒钟,往MQ推送消息

修改Queue_Producer

@Component
public class Queue_Producer {
    //JmsMessagingTemplate是Springboot的Jms模板,Spring的是JmsTemplate
    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    //把ConfigBean类的ActiveMQQueue注入进来
    @Autowired
    private ActiveMQQueue activeMQQueue;

    //发送Queue的方法
    public void producerMsg() {
        jmsMessagingTemplate.convertAndSend(activeMQQueue, "*************" + UUID.randomUUID().toString());
    }

    //间隔3秒投递,Spring的Scheduled用来定时执行
    @Scheduled(fixedDelay = 3000)
    public void producerMsgScheduled() {
        jmsMessagingTemplate.convertAndSend(activeMQQueue,
                "*******************Scheduled" + UUID.randomUUID().toString());
        System.out.println("Scheduled定时投递");
    }

//    //构造注入对象(推荐)
//    public Queue_Producer(JmsMessagingTemplate jmsMessagingTemplate, ActiveMQQueue activeMQQueue) {
//        this.jmsMessagingTemplate=jmsMessagingTemplate;
//        this.activeMQQueue = activeMQQueue;
//    }

}

启动类上开启定时任务@EnableScheduling

运行
技术分享图片

消费者

新建工程

导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
    <version>2.3.1.RELEASE</version>
</dependency>

yml文件

# springboot 启动端口
server:
  port: 8081
# activeMQ配置
spring:
  activemq:
    broker-url: tcp://112.124.20.231:61616 # activeMQ服务器ip
    user: admin
    password: admin
  # 指定连接队列还是主题
  jms:
    pub-sub-domain: false # false = Queue | true = Topic
# 自己定义队列名称
myQueueName: springboot-activemq-queue

创建类

@Component
public class Queue_consumer {
    @JmsListener(destination = "${myQueueName}")
    public void consumerMsg(TextMessage textMessage) throws Exception{
        String text = textMessage.getText();
        System.out.println("消费者收到的消息:"+text);
    }
}

SpringBoot整合-Queue

原文:https://www.cnblogs.com/qiuwenli/p/13475201.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!