Spring Boot集成RabbitMQ相比于Spring集成RabbitMQ简单很多,有兴趣了解Spring集成RabbitMQ的同学可以看我之前的《RabbitMQ学习笔记》系列的博客,特别是优先级消息队列,这里就不做重复介绍了。

在之前创建的Spring Boot项目(Spring Boot实战一:搭建Spring Boot开发环境)中加入依赖jar和RabbitMQ的配置(这里使用的是本地安装的RabbitMQ,需要安装的同学,可以参考我之前的博客:RabbitMQ学习笔记一:本地Windows环境安装RabbitMQ Server):

在pom.xml中加入依赖jar:

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

在application.properties中加入RabbitMQ的配置信息:

# RabbitMQ config
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtualHost=/
spring.rabbitmq.publisher-confirms=true
spring.rabbitmq.publisher-returns=true
spring.rabbitmq.template.mandatory=true

生产者SenderService:

package com.example.demo.service;

import javax.annotation.PostConstruct;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.support.CorrelationData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service
public class SenderService implements RabbitTemplate.ConfirmCallback { @Autowired
private RabbitTemplate rabbitTemplate; @PostConstruct
public void init()
{
rabbitTemplate.setConfirmCallback(this);
} public void send(String msg)
{
// rabbitTemplate.convertAndSend("queue", msg); // 使用这个方法,则对应的消费者Listener中的process方法不能有返回值,否则会报错
Object receive = rabbitTemplate.convertSendAndReceive("queue", msg);
System.out.println("receive " + receive);
} @Override
public void confirm(CorrelationData correlationData, boolean ack, String cause)
{
if (ack) {
System.out.println("消息发送确认成功");
} else {
System.out.println("消息发送确认失败:" + cause); }
}
}

消费者Listener:

package com.example.demo.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component; @Component
public class Listener { private static final Logger logger = LoggerFactory.getLogger(Listener.class); @RabbitListener(queues = "queue")
public String process(String msg)
{
logger.info("Listener: " + msg);
return msg;
}
}

控制器RabbitmqController:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import com.example.demo.service.SenderService; @RestController
public class RabbitmqController { @Autowired
private SenderService sender; @GetMapping("/send")
public String send(String msg)
{
sender.send(msg);
return "Send OK.";
}
}

启动访问:http://localhost:8080/send?msg=rabbitmq ,打印结果如下:

2017-08-14 14:15:34.588  INFO 6452 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2017-08-14 14:15:34.589 INFO 6452 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started
2017-08-14 14:15:34.614 INFO 6452 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 25 ms
消息发送确认成功
2017-08-14 14:15:34.699 INFO 6452 --- [cTaskExecutor-1] com.example.demo.service.Listener : Listener: rabbitmq
receive rabbitmq

PS:需要在RabbitMQ Server创建对应的队列,不了解RabbitMQ的可以参考我之前的《RabbitMQ学习笔记》系列的博客。

最新文章

  1. 远程连接Oracle时出现ORA-01034 和ORA-27101 的解决办法
  2. define 与 inline
  3. WPF 检测计算机网络连接情况
  4. 实体框架 (EF) 入门 =&gt; 六、性能注意事项
  5. iOS开发——导入第三方库引起的unknown type name &#39;NSString&#39;
  6. 201521123045 《Java程序设计》第8周学习总结
  7. 远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)
  8. Ethercat 学习总结一:协议总结
  9. LOJ2540 [PKUWC2018] 随机算法 【状压DP】
  10. 第十二周(MySort)
  11. react 数据管理之state思想指南
  12. sublime同步文件与siderbar
  13. NLP自然语言处理 jieba中文分词,关键词提取,词性标注,并行分词,起止位置,文本挖掘,NLP WordEmbedding的概念和实现
  14. #ifdef和#if defined的差别
  15. hadoop之HDFS学习笔记(二)
  16. HDU1823-Luck and Love-二维线段树(模板)
  17. Linux下 解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img.
  18. ROS naviagtion analysis: costmap_2d--Costmap2DROS
  19. AFN 请求数据https
  20. Java中hashcode的理解

热门文章

  1. 零基础学习java------day3-运算符 以及eclipse的使用
  2. 一起手写吧!Promise!
  3. HTML5 之 FileReader 的使用 (网页上图片拖拽并且预显示可在这里学到) [转载]
  4. 【STM32】WS2812介绍、使用SPI+DMA发送数据
  5. Bitmaps与优化
  6. SpringMVC(2):JSON
  7. 【Java 基础】 instanceof和isInstance区别详解
  8. 【C/C++】函数的分文件编写
  9. Redis cluster 集群命令合集
  10. shell脚本 系统状态信息查看