RabbitMQ在实际项目中的应用

本文介绍了RabbitMQ在实际业务场景中的应用,特别是在模块A向模块B发送消息,更新模块B缓存的情况。文章讨论了fanout和direct交换机的选择,并提供了SpringBoot集成RabbitMQ的示例,同时提出了消息积压的解决方案,强调了正确处理消息确认模式以防止消息重复或丢失的重要性。
摘要由CSDN通过智能技术生成

RabbitMQ在实际项目中的应用

业务场景

说明:

由于一些原因不说明具体业务,大致的业务场景就是,模块A会给模块B发出消息 ,模块B更新本地缓存encache.并且模块B在项目中是集群部署。

选用交换机:

1、fanout 它会把所有的交换器上的消息路由到所有与该交换器邦定的队列中,不需要BindingKey生效

2、direct:它会把消息路由到BindingKey与RoutingKey完全匹配的队列中

3、topic:是direct上的扩展,同样是利用RoutingKey与BindingKey相匹配,但是匹配规则不一样,支持模糊匹配。有如下的规

      • RoutingKey为一个点号“.”分隔的字符串,每个被隔开的独立字符串即为一个单词,是匹配的单位;
      • BindingKey和RoutingKey一样,也是"."分割的字符串;
      • 但不同的是BindingKey,可以用“#”,“”进行类似于占位符的模糊匹配,“#”表示一个单词,""表示多个单词(也可以是零个)

4、headers:依赖发送消息内容中的hearders属性进行匹配,在绑定队列和交换器时指定一组键值对,这里的也就是headers,当发送消息到交换器时,RabbitMQ会获取到该消息的headers,通过比较会路由到相关队列中,这种交换器性能会很差,一般不会使用。

以上就是交换机类型 依照此场景一般我们会考虑到使用fanout 这种模式 (也可以使用direct)

详情见下图:

图示

在这里插入图片描述

实现

这里说明springboot 集成rabbitmq 并且使用direct模型交换机实现该业务场景 展示消费者的代码

pom.xml添加依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
 </dependency>

application.proerties 添加交换机和路由配置

rabbitmq.admin.exchange=admin.billinfo
rabbitmq.admin.routingkey=admin.billinfo

添加RabbitmqConfig类

@Configuration
public class RabbitMqConfig {
   
	private  final Logger logger = LoggerFactory.getLogger(RabbitMqConfig.class);

	
    @Value("${rabbitmq.admin.exchange}")
    String  adminExchange;

    @Value("${rabbitmq.admin.routingkey}")
    String  adminRouteKey
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值