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

时间:2024-03-23 17:08:46

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

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

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

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

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

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

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

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

一,项目集成。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4,通过postman发送消息。

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

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

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

五,消息确认。

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

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

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

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

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

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

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

4,使用postman发送测试。

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

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

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

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

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

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

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

8,使用postman进行测试。

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

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

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

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

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

11,查看回调结果。

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

六,手动消息确认。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

通过向微信公众号发送springcloud可以获取git源码地址。