activeMQ(二、与springboot集成)

POOM文件

首先导入activemq所需的jar包

<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>
    </dependencies>

 

生产者

application.yml

server:
  port: 8090
  servlet:
    context-path: /activemqProducer
spring:
  activemq:
    broker-url: tcp://127.0.0.1:61616
    user: 123
    password: 123

ActiveMqConfig

package com.example.activemqtest.config;

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 javax.jms.Queue;
import javax.jms.Topic;

@Configuration
public class ActiveMQConfig {

    @Bean
    public Queue queue(){
        return new ActiveMQQueue("queue2");
    }

    @Bean
    public Topic topic(){
        return new ActiveMQTopic("topic2");
    }

}

配置生产者要发送消息的队列或者主题,注入spring中

ProducterController

package com.example.activemqtest.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.jms.Queue;
import javax.jms.Topic;


@RestController
public class ProducterController {

    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    @Autowired
    private Queue queue;

    @Autowired
    private Topic topic;


    @GetMapping("/sendMsgByQueue")
    public String sendMsgByQueue(String msg){
        jmsMessagingTemplate.convertAndSend(queue,msg);
        return msg;
    }

    @GetMapping("/sendMsgByTopic")
    public String sendMsgByTopic(String msg){
        jmsMessagingTemplate.convertAndSend(topic,msg);
        return msg;
    }
}

消费者

@JmsListener(destination = "queue2")
    //方法返回发送给queue3
    @SendTo("queue3")
    public String handleMessage(String msg){
        System.out.println("接收到的返回是:" + msg);
        return "返回:"+ msg;
    }

以上是消费者接收队列queue2的方式

若要接收topic,需要增加配置

server:
  port: 8091
  servlet:
    context-path: /activemqConsumer
spring:
  activemq:
    broker-url: tcp://127.0.0.1:61616
    user: 123
    password: 123
  jms:
    pub-sub-domain: true

 

@JmsListener(destination = "topic2")
    public void topicConsumer1(String msg){
        System.out.println("消费者1接收为:"+msg);
    }

    @JmsListener(destination = "topic2")
    public void topicConsumer2(String msg){
        System.out.println("消费者2接收为:"+msg);
    }

 

posted @ 2019-10-16 10:48  学霸王先森  阅读(160)  评论(0编辑  收藏  举报