https://git.coding.net/dgutllx/RabbitmqStudy.git

上面就是我博客里面的项目,感谢大大,学习到不少

  1. publisher-confirms,实现一个监听器用于监听Broker端给我们返回的确认请求:RabbitTemplate.ConfirmCallback
  2. publisher_returns,保证消息对Broker端是可达的,如果出现路由键不可达的情况,则使用监听器对不可达的消息进行后续的处理,保证消息的路由成功:
    RabbitTemplate.ReturnCallback

注意一点:在发送消息的时候对template进行配置 mandatory = true 保证监听有效

生产端还可以配置其他属性,比如发送重试,超时时间,次数,间隔等等

spring.rabbitmq.addresses=localhost
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
spring.rabbitmq.connection-timeout=15000spring.rabbitmq.publisher-confirms=true
spring.rabbitmq.publisher-returns=true
spring.rabbitmq.template.mandatory=true
package com.bfxy.springboot.producer;import java.util.Map;import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.core.RabbitTemplate.ConfirmCallback;
import org.springframework.amqp.rabbit.core.RabbitTemplate.ReturnCallback;
import org.springframework.amqp.rabbit.support.CorrelationData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;import com.bfxy.springboot.entity.Order;@Component
public class RabbitSender {//自动注入RabbitTemplate模板类@Autowiredprivate RabbitTemplate rabbitTemplate;  //回调函数: confirm确认final ConfirmCallback confirmCallback = new RabbitTemplate.ConfirmCallback() {@Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) {System.err.println("correlationData: " + correlationData);System.err.println("ack: " + ack);if(!ack){System.err.println("异常处理....");}}};//回调函数: return返回final ReturnCallback returnCallback = new RabbitTemplate.ReturnCallback() {@Overridepublic void returnedMessage(org.springframework.amqp.core.Message message, int replyCode, String replyText,String exchange, String routingKey) {System.err.println("return  : " + exchange + ", routingKey: "+ routingKey + ", replyCode: " + replyCode + ", replyText: " + replyText);}};//发送消息方法调用: 构建Message消息public void send(Object message, Map<String, Object> properties) throws Exception {MessageHeaders mhs = new MessageHeaders(properties);Message msg = MessageBuilder.createMessage(message, mhs);rabbitTemplate.setConfirmCallback(confirmCallback);rabbitTemplate.setReturnCallback(returnCallback);//id + 时间戳 全局唯一 CorrelationData correlationData = new CorrelationData("1234567890");rabbitTemplate.convertAndSend("exchange-1", "springboot.abc", msg, correlationData);}//发送消息方法调用: 构建自定义对象消息public void sendOrder(Order order) throws Exception {rabbitTemplate.setConfirmCallback(confirmCallback);rabbitTemplate.setReturnCallback(returnCallback);//id + 时间戳 全局唯一 CorrelationData correlationData = new CorrelationData("0987654321");rabbitTemplate.convertAndSend("exchange-2", "springboot.def", order, correlationData);}}

SpringBoot 整合配置详解之 – 消费端核心配置

  1. spring.rabbitmq.listener.simple.acknowledge-mode=MANUAL
  2. spring.rabbitmq.listener.simple.concurrency=1
  3. spring.rabbitmq.listener.simple.max-concurrency=5

首先配置手工确认模式,用于ACk的手工处理,这样子我们可以保证消息的可靠性送达,或者在消费端消费失败的时候可以做到重回队列,根据业务记录日志等处理

消费端监听 @RabbitMQListener 注解 , 这个对于在实际工作中非常的好用

@RabbitMQListener是一个组合的注解,里面可以注解配置
@QueueBingding,@Queue , @Exchange直接通过这个组合注解一次性搞定消费端交换机,队列,绑定,路由,并且配置监听功能等

package com.bfxy.springboot.conusmer;import java.util.Map;import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.Message;
import org.springframework.messaging.handler.annotation.Headers;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;import com.rabbitmq.client.Channel;@Component
public class RabbitReceiver {@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "queue-1", durable="true"),exchange = @Exchange(value = "exchange-1", durable="true", type= "topic", ignoreDeclarationExceptions = "true"),key = "springboot.*"))@RabbitHandlerpublic void onMessage(Message message, Channel channel) throws Exception {System.err.println("--------------------------------------");System.err.println("消费端Payload: " + message.getPayload());Long deliveryTag = (Long)message.getHeaders().get(AmqpHeaders.DELIVERY_TAG);//手工ACKchannel.basicAck(deliveryTag, false);}/*** *     spring.rabbitmq.listener.order.queue.name=queue-2spring.rabbitmq.listener.order.queue.durable=truespring.rabbitmq.listener.order.exchange.name=exchange-1spring.rabbitmq.listener.order.exchange.durable=truespring.rabbitmq.listener.order.exchange.type=topicspring.rabbitmq.listener.order.exchange.ignoreDeclarationExceptions=truespring.rabbitmq.listener.order.key=springboot.** @param order* @param channel* @param headers* @throws Exception*/@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "${spring.rabbitmq.listener.order.queue.name}", durable="${spring.rabbitmq.listener.order.queue.durable}"),exchange = @Exchange(value = "${spring.rabbitmq.listener.order.exchange.name}", durable="${spring.rabbitmq.listener.order.exchange.durable}", type= "${spring.rabbitmq.listener.order.exchange.type}", ignoreDeclarationExceptions = "${spring.rabbitmq.listener.order.exchange.ignoreDeclarationExceptions}"),key = "${spring.rabbitmq.listener.order.key}"))@RabbitHandlerpublic void onOrderMessage(@Payload com.bfxy.springboot.entity.Order order, Channel channel, @Headers Map<String, Object> headers) throws Exception {System.err.println("--------------------------------------");System.err.println("消费端order: " + order.getId());Long deliveryTag = (Long)headers.get(AmqpHeaders.DELIVERY_TAG);System.err.println("deliveryTag = "+deliveryTag);//手工ACKchannel.basicAck(deliveryTag, false);}}

PS:由于类配置写在代码里面非常的不友好,所以强烈建议大家使用配置文件配置

spring.rabbitmq.addresses=localhost
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
spring.rabbitmq.connection-timeout=15000spring.rabbitmq.listener.simple.acknowledge-mode=manual
spring.rabbitmq.listener.simple.concurrency=5
spring.rabbitmq.listener.simple.max-concurrency=10spring.rabbitmq.listener.order.queue.name=queue-2
spring.rabbitmq.listener.order.queue.durable=true
spring.rabbitmq.listener.order.exchange.name=exchange-2
spring.rabbitmq.listener.order.exchange.durable=true
spring.rabbitmq.listener.order.exchange.type=topic
spring.rabbitmq.listener.order.exchange.ignoreDeclarationExceptions=true
spring.rabbitmq.listener.order.key=springboot.*

发送的数据要实现序列化接口

package com.bfxy.springboot.entity;import java.io.Serializable;public class Order implements Serializable {private String id;private String name;public Order() {}public Order(String id, String name) {super();this.id = id;this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

SpringBoot 结合 RabbitMQ 简单项目相关推荐

  1. SpringBoot结合RabbitMQ简单实现订单延迟取消

    参考了这位大佬的博客,详细看这里 springboot整合RabbitMQ实现延时自动取消订单 1.导入jar包 <dependency><groupId>org.spring ...

  2. 1112_Vue+SpringBoot+Mybatis的简单员工管理项目

    Vue+SpringBoot+Mybatis的简单员工管理项目 本文项目参考自:https://github.com/boylegu/SpringBoot-vue https://www.cnblog ...

  3. 【项目实战】 ---- 简单整合SpringBoot + MyBatis + Themyleaf小项目

    简单整合SpringBoot + MyBatis + Themyleaf小项目 一.项目环境搭建① 二.数据库表设计及项目环境② 三.图片验证码功能 四.用户注册功能 五.用户登录功能 六.员工的查询 ...

  4. SpringBoot+layui实现简单登录(项目创建+前后端配置)

    后端技术 开发工具 IDEA Java 1.8 项目构建 spring boot 2.6.7 项目管理 maven 3.6.3 持久层 mybatis-plus 3.5.0 数据库 MySQL 8.0 ...

  5. SpringBoot简单项目搭建,从数据读取数据展示到页面

    springboot快速搭建web项目,无需繁琐xml配置,热部署,无需重启服务器,简单部署只需打jar包即可,有很多的优点! 刚接触到springboot花费了好几个小时,撸完一个又一个的配置坑,最 ...

  6. SpringBoot简明教程之项目属性配置(二):@ConfigurationProperties与@Value简单比较

    前文回顾 @ConfigurationProperties与@Value简单比较 如何通过@Value来实现注入值 是否支持松散绑定(Relaxed Binding) 是否支持SpEL语法 是否支持J ...

  7. 九、springboot整合rabbitMQ

    springboot整合rabbitMQ 简介 rabbitMQ是部署最广泛的开源消息代理. rabbitMQ轻量级,易于在内部和云中部署. 它支持多种消息传递协议. RabbitMQ可以部署在分布式 ...

  8. SpringBoot整合 ActiveMQ、SpringBoot整合RabbitMQ、SpringBoot整合Kafka

    1.概念:SpringBoot 整合消息服务2.具体内容对于异步消息组件在实际的应用之中会有两类:· JMS:代表作就是 ActiveMQ,但是其性能不高,因为其是用 java 程序实现的:· AMQ ...

  9. Springboot整合一之Springboot整合RabbitMQ

    前言 目前,springboot已然成为了最热的java开发整合框架,主要是因其简单的配置,并且本身提供了很多与第三方框架的整合,甚至可以让我们在短短的几分钟里就可以搭建一个完整的项目架构.所以,博主 ...

最新文章

  1. 查看Linux进程状态
  2. mysql kingshard 扩容_mysql中间件之kingshard
  3. python不能处理excel文件-别以为Python的pandas不能处理非规范Excel数据
  4. 用yum源配合源码包安装openresty、mariadb、php7服务
  5. cf1206解题报告
  6. 【转】ABP源码分析四:Configuration
  7. 2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势(下)
  8. 塔拉 孤岛危机2_《孤岛危机》新作爆料!类似于《绝地求生》的多人游戏
  9. Vue学习(二):class与style绑定
  10. 【系统分析师之路】2019年上系统分析师综合知识真题
  11. 怎么提供电子邮件副本_停止提供您的电话号码和电子邮件
  12. python实现学员管理系统(增删改查)
  13. 【pytorch图像分类】AlexNet网络结构
  14. openEuler Summit | 胡欣蔚:全场景欧拉 – 志之所趋,无远弗届
  15. 如何用proe/croe将三维文件转为二维CAD轴侧图
  16. Android自拍相机应用——图片的镜像翻转
  17. Leetcode2169. 得到 0 的操作数
  18. 什么是概念模型?概念模型的作用是什么?
  19. 含碘稀土铕(Ⅲ)配合物荧光微球/稀土铕配合物掺杂功能化二氧化硅微球的制备方法
  20. 10.(leaflet之家)leaflet暗色系地图样式地图(滤镜实现,反色滤镜)

热门文章

  1. Maven自学日志01---安装
  2. ES5(一)——保护对象
  3. nacos1.2(1.3)的下载及CentOS7下安装nacos
  4. linux let s证书续期,BT(宝塔面板)Let’s Encrypt证书续签方法
  5. ArcGIS Python编程案例-电子资料链接
  6. 设计模式综和实战项目x-gen系列二
  7. Expression Design与Blend制作滚动的小球动画教程
  8. Seven times have I despised my soul 《我曾七次鄙视自己的灵魂》
  9. Disabling contextual LOB creation as createClob()
  10. 强大的流程图绘制控件WpfDiagram