一、命名规范

1.Queue设计

  1. A生产消息,指定由B消费,这样的话就定义一个队列。
  2. A生产消息,由B和C共同消费,因B和C都为多个节点,故系统定义为两个不同队列,虽然消息是相同的。
  3. A和B生产消息,由C消费,可定义一个队列,也可定义两个队列。为便于区分消息生产者和消费者,定义消息队列名为生产者模块简称_消息参数_消费者模块简称,按照此思路,此种场景也需定义两个队列。

如示例,队列名与队列ID一致:

2.Exchange设计

如示例,交换机exchange命名以消费方BasicDev01与交换机ID保持一致,路由key为队列名_key

3.Message 设计

消息类型根据异常推进机制和实际业务分成三类:

  1. 同步调用异常重发机制。此场景发生在客户端同步调用服务端时出现异常,客户端生产消息推送至MQ服务器,自身消费此消息并重发同步接口调用服务端。此场景下生产者和消费者为同一模块。以支付工具调用银行网关1000接口为例,队列名称即为Payt_Bgate1000Request_Payt;
  2. 同步返回异步重发机制。此场景发生在客户端同步调用服务端,服务端同步返回响应后同时发送异步通知。服务端推送消息至MQ服务器,由客户端消费该消息并进行业务逻辑处理。以支付工具调用银行网关1000接口,银行网关响应1000消息为例,队列名称即Bgate_Bgate1000Response_Payt。
  3. 异步推送机制。此场景为最普通的MQ应用,双方处理能力不对等及处理时效性要求不高场景。以银行网关交易成功后异步通知清分系统为例,消息编号为1000,队列名称即为Bgate_Clr1000Message_Clr。

按照上文所例,消息内容分成三类:

  1. 系统简称+接口编号+Request;
  2. 系统简称+接口编号+Response;
  3. 系统简称+接口编号+Message;

按照上文所例,消息绑定的交换机命名以消费模块命名,如消息队列Bgate_Bgate1000Response_Payt,则交换机为Payt。

二、命令使用

1.推荐】消息发送

消息发送时,如果存在并发的情况,尽量使用sendDataToMQByRoutingKey 方法进行消息发送,不要使用sendDataToMQ 方法。

  1. 【推荐】禁用命令

消息发送时,如果存在并发的情况,禁止使用 producer.setRoutingKey()方法

三、XML配置

1.【推荐】权限隔离

RabbitMQ 可以虚拟消息服务器 virtualHost, 每个virtualHost 相当于一个独立的RabbitMQ消息服务器,每个virtualHost 是相互隔离的 exchange 、message、queue 互不相通。

正例:不相干的业务采用vitualHost做隔离。

2.【推荐】消息,队列,交换机声明

要保证消息不丢失,需要做到三点

  1. 消息是持久化
  2. 队列是持久化
  3. 交换机是持久化

其次要注意队列,交换机什么是否自动删除,排他性设置等。

  1. 消息声明

消息需要设置成持久化的发送方式,在Spring整合RabbitMQ默认是持久发送模式的。

DeliveryMod 设置为2时,消息持久化

  1. 队列持久化声明

声明队列持久化设置 durable=“true”

队列不自动删除 auto-delete=“false” 这里不自动删除的意思是,即使没有任何消费者订阅该队列,队列也不会删除,如果设置成true,当没有消费者订阅队列时,队列删除。exclusive=“false”设置成false是指不排他,不同连接都可见,如果是true,只对首次声明他的连接可见,并且在连接断开时自动删除,并且及时设置了auto-delete=“false”也会自动删除。但是同一个连接的不同信道(Channel)可以访问同一个创建的排他队列。

交换机声明

交换机声明需要声明持久 durable=”true”

不自动删除auto-delete=”false”设置成false 表示的不自动删除,但是如果设置成true 表示自动删除。这里自动删除的意思是:当队列或者交换器都与之解绑,交换机会自动删除,不能认为是客户端与之断开来连接,交换机删除。

3.【建议】多个连接时交换机和队列的声明

需要使用spring-rabbit-1.2.xsd

不同的ConnectionFactory 设置有不同ID的rabbit:admin

声明队列和交换机,需要制定哪个 rabbit:admin

队列声明

交换机声明

4.【推荐】

RabbitMQ 使用规范相关推荐

  1. spring boot 集成sleuth

    spring boot 集成sleuth 1. 理论 1.1 sleuth是什么 1.2 sleuth有哪些 1.3 链路追踪的一些基本概念 1.4 zipkin的组成 2. zipkin 实例 2. ...

  2. 别人家的团队怎么用RabbitMQ:我总结的5点规范

    大概从 2013 年开始,我就开始了自己和 RabbitMQ 的接触,到现在已经有七年多了. 在这七年中,既有一些对 RabbitMQ 的深度体验,更有无数的血泪史. 而根据我这么多年的使用经验,我将 ...

  3. springboot-26-springboot 集成rabbitmq

    rabbitmq是基于AMQP规范的一个消息代理, 它可以兼容jms, 支持其他语言, 并且可以跨平台 1, 安装 1) 普通安装 度娘: 2) docker 安装 sudo docker run - ...

  4. Java 命名规范(非常全)

    欢迎关注方志朋的博客,回复"666"获面试宝典 在本文中,将从大到小,从外到内,总结Java编程中的命名规范.文中将会涉及到日常工作中常见的命名示例,如包命名,类命名,接口命名,方 ...

  5. JMS规范、ActiveMQ Broker和ActiveMQ传输协议

    Java实现ActiveMQ通讯(构建过程) 编写pom.xml配置文件 <!-- https://mvnrepository.com/artifact/org.apache.activemq/ ...

  6. Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?

    面试题 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别,以及适合哪些场景? 面试官心理分析 其实面试官主要是想看看: ...

  7. rabbitmq实战:高效部署分布式消息队列_一文看懂消息队列中间件--AMQ及部署介绍...

    概述 最近有个小项目用到了AMQ来做消息队列,之前介绍的主要是rabbitmq,所以今天主要提一下AMQ,也简单介绍下两者的区别~ 消息队列中间件 消息队列中间件(简称消息中间件)是指利用高效可靠的消 ...

  8. Java 访问RabbitMQ

    一.概述 前面学过ActiveMQ.ActiveMQ主要是实现的JMS规范,而RabbitMQ就是AMQP的一个具体实现. RabbitMQ里面有几个概念:生产者.消费者.消息.交换器.路由键.队列. ...

  9. 【消息中间件】浅谈中间件优缺RabbitMQ基本使用

    消息中间件概述 MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法.是在消息的传输过程中保存消息的容器.多用于分布式系统之间进行通信. 为什么使用MQ 在项目中,可将一些 ...

  10. Kafka、ActiveMQ、RabbitMQ、RocketMQ 区别以及高可用原理

    为什么使用消息队列 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么? 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务 ...

最新文章

  1. Ubuntu 16.04安装QQ(不一定成功)
  2. 字符串字符数组和基本类型的相互转换
  3. 用setResult回传intent参数的时候,接收方activity闪退
  4. ubuntu16.04 Linux+xfce4的文件夹出现两种背景颜色+文件夹中右键打开终端失灵了.
  5. 使用.NET Core 编写端到端测试
  6. Markdown(四)——绘图工具mermaid之状态图stateDiagram
  7. wps vba宏插件_wps下载_wps下载免费完整版客户端[办公软件]
  8. 工具说明书 - 使用带连字功能(ligature)的编程字体
  9. html移动图片广告代码,右下角弹出广告代码 控制div移动 1)div是否
  10. 通信原理 | 信道容量
  11. 解决微信调整字体大小导致页面样式混乱的问题
  12. 迪杰斯算法c语言,欧博体育APP-欧博体育APP
  13. 解决虚拟机中XYplorer中文件列表不能刷新的问题_我是亲民_新浪博客
  14. 网页中设定表格边框的厚度的属性_补充一点前端知识
  15. 在部队当程序员是什么体验?
  16. Laragon 开机启动自启创建失败
  17. 微信小程序 canvas 分享图片 生成图片
  18. linux有个很大的内存目录,Linux中的内存管理
  19. 编写css代码的方式
  20. 挑战杯获奖作品_小挑战杯-创青春创新创业竞赛

热门文章

  1. 单体架构常用注解合集
  2. SQL SERVER STATISTICS
  3. 爬虫-3-requests和代理
  4. 在linux系统下做软raid教程
  5. 面试官:请实现单行文本居中,多行文本左对齐?
  6. js中this指向的四种规则+ 箭头函数this指向
  7. 1KB文件夹快捷方式病毒清除(转)
  8. Unity3D上路_01-2D太空射击游戏
  9. 强网杯S6初赛 部分题解
  10. oracle19c特性以及CDB环境搭建