RabbitMQ之路由键转发消息
RabbitMQ学习
参考:https://www.jianshu.com/p/6b62a0ed2491
消息队列:目前流行的有 Kafka、RabbitMQ、ActiveMQ等
功能:为了解决消息的分布式消费,完成项目、服务之间的解耦动作。消息的生产者与消费者之间完全采用异步通信方式,极大的提高了系统的响应能力,从而提高系统的网络请求吞吐量。
Spring-Boot 整合RabbitMQ
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
RabbitMQ:跨平台的分布式消息队列服务,可以部署在任意的操作系统上。需要Erlang环境的支持,需要安装Erlang 和 RabbitMQ
RabbitMQ中有三种常用的转发方式:
1.DirectExchange:路由键方式转发消息
2.FanoutExchange:广播方式转发消息
3.TopicExchange: 主题匹配方式转发消息
DirectExchange:消息被生产者发送至RabbitMQ会携带一个路由键Key,RabbitMQ会将该消息转发,只有路由键为Key的队列消费者会完成消息的消费过程。
几个重要的类:
RabbitTemplate.ConfirmCallback:用来回调消息发送成功后的方法,当一个消息被成功写入RabbitMQ服务端时,就会自动回调RabbitTemplate.ConfirmCallback接口内的confirm方法完成通知。
两个配置信息:
队列的交换信息 ExchangeEnum
@Getter
public enum ExchangeEnum {
USER_REGISTER("user.register.topic.exchange");
private
String value;
ExchangeEnum(String value){
this.value = value;
}
}
队列路由信息 QueueEnum
@Getter
public enum QueueEnum { /**
* 用户注册枚举
*/
USER_REGISTER("user.register.queue","user.register"); /**
* 队列名称
*/
private String name; /**
* 队列路由键
*/
private String routingKey; QueueEnum(String name,String routingKey){
this.name = name;
this.routingKey = routingKey;
}
}
用户注册消息队列配置
@Configuration
public class UserRegisterQueueConfiguration { /**
* 配置路由交换对象实例
*/
@Bean
public DirectExchange userRegisterDirectExchange(){
return new DirectExchange(ExchangeEnum.USER_REGISTER.getValue());
} /**
* 配置用户注册队列对象实例
* 并设置持久化队列
*/
@Bean
public Queue userRegisterQueue(){
return new Queue(QueueEnum.USER_REGISTER.getName(),true);
} /**
* 将用户注册队列绑定到路由交换配置上并设置指定路由键进行转发
*
*/
@Bean
public Binding userRegisterBinding(){
return BindingBuilder
.bind(userRegisterQueue()).to(userRegisterDirectExchange()).with(QueueEnum.USER_REGISTER.getRoutingKey());
} }
配置交换实例:
DirectExchange实例对象,为交换设置名称,消息提供者与消息消费者的交换名称必须一致才可以通讯。
配置队列实例:
Queue实例对象,为消息队列设置名称,生产者与消费者的队列名称也必须一致。
绑定队列实例到交换实例中:
Binding实例对象,将Queue绑定到Exchange上,并通过设置的路由key进行消息转发。配置了路由key后,只有符合该路由的配置的消息才会被妆发到绑定的交换上的消息队列。
生产者:
在业务逻辑完成之后,调用消息发送方法,将消息发送至队列中
消费者:
@Component
@RabbitListener(queues = "user.register.queue")
public class UserRegisterMQ { @RabbitHandler
public void execute(UserEntity message){
log.error("用户:"+message.toString()+",注册成功");
}
}
两个注解:
@RabbitListener:队列消息监听注解,该注解配置监听queue内的队列名称列表。
@RabbitHandler 消息处理方法,该方法的参数需要与生产者发送消息的类型保持一致,否则无法自动调用消费方法,且无法完成消费。
本文临摹(抄袭)我的偶像 简书:恒宇少年 Spring-Boot 四十一章。
生产者和消费者是两个不同的项目,关于RabbitMQ的配置信息一模一样,两个项目分别启动,消息可以成功接收。
问题:我将消费者打包发给同事,同事无法启动,我们在同一局域网,但是他本地没有安装RabbitMQ,该问题后续定位。。。。。。。。。
RabbitMQ之路由键转发消息的更多相关文章
- SpringCloud Stream生产者配置RabbitMq的动态路由键
在写这个文章前不得不吐槽目前国内一些blog的文章,尽是些复制粘贴的文章,提到点上但没任何的深入和例子.......... 经过测试下来总结一下RabbitMQ的Exchange的特性: 1.dire ...
- python中RabbitMQ的使用(路由键)
1.简介 当我们希望每个接收端接收各自希望的消息时,我们可以使用路由键,此时交换机的类型为direct. 2.工作原理 每个接收端的消息队列在绑定交换机的时候,可以设定相应的路由键. 发送端通过交换机 ...
- 消息中间件系列三:使用RabbitMq原生Java客户端进行消息通信(消费者(接收方)自动确认模式、消费者(接收方)自行确认模式、生产者(发送方)确认模式)
准备工作: 1)安装RabbitMQ,参考文章:消息中间件系列二:RabbitMQ入门(基本概念.RabbitMQ的安装和运行) 2.)分别新建名为OriginalRabbitMQProducer和O ...
- SpringCloud(六) - RabbitMQ安装,三种消息发送模式,消息发送确认,消息消费确认(自动,手动)
1.安装erlang语言环境 1.1 创建 erlang安装目录 mkdir erlang 1.2 上传解压压缩包 上传到: /root/ 解压缩# tar -zxvf otp_src_22.0.ta ...
- RabbitMQ入门-路由-有选择的接受消息
比如一个日志系统,之前的处理方式呢,是各种类型(info,error,warning)的消息都发给订阅者,可是实际情况上不一定都需要.可能A需要error,其他的都不需要.那么就引入了今天的处理方式- ...
- RabbitMQ 入门系列:3、基础含义:持久化、排它性、自动删除、强制性、路由键。
系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...
- python中RabbitMQ的使用(路由键模糊匹配)
路由键模糊匹配 使用正则表达式进行匹配.其中“#”表示所有.全部的意思:“*”只匹配到一个词. 匹配规则: 路由键:routings = [ 'happy.work', 'happy.life' , ...
- springboot rabbitmq direct exchange和topic exchange 写法上关于路由键的区别
这是direct exchange写法中消息发送写法,可见下图红色框中路由键是queue队列中定义的路由键 这是topic exchange写法中消息发送写法,可见下图红色框中路由键是exchange ...
- RabbitMQ学习笔记2-理解消息通信
消息包含两部分:1.有效载荷(payload) - 你想要传输的数据.2.标签(lable) - 描述有效载荷的相关信息,包含具体的交换器.消息的接受兴趣方等. rabbitmq的基础流程如下: Ra ...
随机推荐
- HTTPS之acme.sh申请证书
1.关于let's encrypt和acme.sh的简介 1.1 let's encrypt Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安 ...
- gmock
https://www.cnblogs.com/welkinwalker/archive/2011/11/29/2267225.html http://www.cnblogs.com/jycboy/p ...
- springcloud灰度发布实现方案
Nepxion Discovery是一款对Spring Cloud Discovery服务注册发现.Ribbon负载均衡.Feign和RestTemplate调用.Hystrix或者阿里巴巴Senti ...
- (原)faster rcnn的tensorflow代码的理解
转载请注明出处: https://www.cnblogs.com/darkknightzh/p/10043864.html 参考网址: 论文:https://arxiv.org/abs/1506.01 ...
- Effective Java 第三版——79. 避免过度同步
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- AWS免费套餐服务器部署NETCORE网站
之前的linode充了5美元,一个月就用完了,还是创建的最便宜的服务器的!!! 以前一直想用用aws的所谓的免费套餐服务器的,现在linode过期了,可以试着用用了 下面是我的操作流程,包含错误及解决 ...
- Atitit.如何文章写好 论文 文章 如何写好论文 技术博客 v4
Atitit.如何文章写好 论文 文章 如何写好论文 技术博客 1. 原则 2 1.1. 有深度, 有广度 2 1.2. 业务通用性有通用性 尽可能向上抽象一俩层..业务通用性与语言通用性. 2 ...
- Sublime Text3 运行 PHP 文件
在 Zend Studio(12.5)下可以通过 Run(Ctrl + F11)把 PHP 程序的执行结果通过 Debug Output 显示在 IDE 中,这样比开启 Server,再打开浏览器执行 ...
- svg中实现文字随曲线走向,HTML直接写和JavaScript创建对象两种方式
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...
- Airtest iOS测试环境部署
[本文出自天外归云的博客园] 简介 这个Airtest IDE是通过iOS-Tagent来操作iPhone的,你可以在Airtest IDE里录制脚本来实现自动化操作iPhone 前提 1. 得有个i ...