spring cloud项目扩展(四)项目集成rabbitMQ

​rabbitMQ的主要作用是解耦,异步和流量消峰。举个例子,我有个etc加油自动扣费的项目。用户在加完油以后我扣费就行了,但是我想做一个信息采集,而信息收集,而信息收集用户是不需要关心,并且用户也不需要知道采集是否成功。如果把代码耦合在一起,采集失败不让用户消费,这样不合理,因为数据采集,让用户扣费多等待1秒钟这样也不合理。所以把采集和扣费通过rabbitMQ进行解耦和异步。削峰的概念就是处理同一时间有大量请求的问题,如果同一时间有很多很多车辆同时消费,而我后台扣费和信息采集时后台的能力有限,就要通过rabbitMQ做一个缓冲。

本文主要介绍一下rabbitMQ的一些基础使用方式,下一篇会对rabbitMQ在实际项目中的使用进行详细讲述。

具体的安装过程就不在记录了。最后能访问rabbitMQ控制台说明已经安装成功。本篇主要对rabbitMQ在项目中的基本使用方法做记录。

首先先介绍一下交换机的集中基本使用模式。rabbitMQ有几个基本概念,虚拟主机,队列,交换机和绑定。从网上找了一张我感觉画的最好看的图。

整个rabbitMQ服务可以看做一个虚拟主机。消息的生产者发出消息后,经过虚拟主机的处理,最后由消息的消费者接收。rabbitMQ的集中模式都是消息处理的方式。下面挨个开始介绍一下集中模式与项目的集成和实现。

一,项目集成。

1,此次集成我们用到service和web两个服务。web项目作为消息的生产者,service项目作为消息的消费者。首先在两个服务的pom文件中引入依赖的包。

2,在两个服务的配置文件中加入rabbitMQ的配置。

二,直连交换机。一个队列绑定一个交换机,交换机器绑定一个键值,我们称为路由键。消息生产者发出的每个消息都带着一个键值,当消息的键值和交换机的键值完全匹配的时候,消息就会被转发。

1,在两个项目的config包中创建直连交换机的配置文件DirectRabbitConfig。一个配置文件在两个项目中分别复制一份。

2,web项目中创建一个测试controller,名字为AmqpController。并且创建一个测试方法。

3,在service项目中创建rabbitmq包,并且创建一个直连交换机的消息接收类。

4,此时启动我们的项目。通过postman发送测试。

5,直连交换机收到了消息。

三,主题交换机。路由键与一个类似于正则的模式匹配。规则是符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。消息的生产者绑定的键值与模式路由键匹配,消息就可以分发。

1,在两个项目的config包中创建主题交换机的配置文件。

2,在web项目的controller中写两个测试方法。

3,在service的rabbitmq包中创建两个消息接收类。一个消息接收类的路由键是只接收topic.man的消息,一个是接收所有topic开头的消息。

4,通过postman测试sendtopicmessage1,发现发送键值为topic.man的消息时,两个交换机都可以收到消息。

5,通过postman测试sendtopicmessage2,发现发送键值为topic.woman的消息时,发现只有路由键是topic.#的才能接收到消息。并且是绑定在该交换机所有的队列都可以接收到消息。

四,扇形交换机。扇形交换机不绑定路由键,只要发送到扇形交换机的消息,都会被转发到绑定到该交换机的队列上,就像广播一样。

1,在两个项目中创建扇形交换机的配置文件。

2,在web的controller中创建测试消息生产者。

3,在service的rabbitmq包中创建三个消息接收类。

4,通过postman发送消息。

5,三个队列都可以接收到消息。

五,消息确认。

1,在项目中要增加消息确认的配置,我们在最开始的时候已经加上了。

2,在web项目中的config包中配置消息确认回调函数。

3,创建个消息生产者。这种情况是测试没有找到交换机的情况。

4,使用postman发送测试。

5,查看返回结果。发现消息发送了,但是没找到交换机,会触发ConfirmCallback 回调。

6,在两个项目的的DirectRabbitConfig中增加一个交换机。但是不绑定任何队列。这种情况是测试找到交换机但是没找到队列的情况。

7,创建一个消息生产者测试方法。

8,使用postman进行测试。

9,查看返回结果,发现两个回调函数都被调用了。

10,测试发送成功的情况。

11,查看回调结果。

六,手动消息确认。

1,service项目的config包中创建MessageListenerConfig

2,修改直连交换的接收代码,增加消息处理。

3,使用postman发送直连交换机消息测试。

4,查询结果,发现消息已经接收到并且已经确认。

5,如果有些消息需要手动确认,有些消息需要自动确认,只需要修改MessageListenerConfig的simpleMessageListenerContainer,把需要手动确认的加进去就可以了。

6,注意加进去的消息处理类要继承ChannelAwareMessageListener。

并实现里面的消息处理方法onMessage即可。

 

关注公众号:直立行走的程序猿

公众号回复springcloud获得git的源码下载地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值