SpringBoot整合-Queue

生产者

新建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);
    }
}
posted @ 2020-08-11 14:01  柒丶月  阅读(1591)  评论(0编辑  收藏  举报