微服务——解耦之RabbitMQ消息队列中间件

问题:用户微服务需要用到短信发送验证码的需求

1.直接调用阿里云短信发送的工具类

这一种方式看起来没什么问题,实际上存在代码耦合的情况。假如一个逻辑中,不仅需要给用户的手机发送短信还需要,给他绑定的邮箱发送邮件,并且绑定的微信也需要发送消息。那么我们的代码将会变成如下情况。

public void sendMessage(){
	......
	
	//发送手机短信
	smsUtils.sendPhoneMessage();
	//发送邮件
	smsUtils.sendEmailMessage();
	//微信消息通知
	smsUtils.sendWeChetMessage();
	
	......
}

——1.1假如我们中间的发送邮件代码发生一些不可预知的错误(error),那么可能后续的代码逻辑无法继续运行。
——1.2而我们要清楚一件事情,发送短信,发送邮件,发送微信的通知,这三者并没有实质上太大的关联,它们三者中的任何一个发生故障,都不应该影响到我们主业务逻辑的运行。(无实际关联性)
——1.3代码复杂,假如以前只是向手机发送短信,后来添加了新的需求,向邮箱与微信发送信息等等。又或者,工具类修改了,那么我们的代码也要跟着修改。直接增加了工作量,工程也难以维护和扩展。

2.在微服务中引入rabbitMQ解决对应的问题。

2.1 消息队列中间件简介。

消息队列中间件是分布式系统中重要的组件,主要用于解耦,异步消息,流量削锋,消息通讯等问题,实现高性能,高可用,可伸缩和最终一致性。
类似的队列还有:ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。

2.2 rabbitMQ的特点。

			RabbitMQ 特点
			目前很多互联网大厂都在使用RabbitMQ
			RabbitMQ底层采用Erlang语言进行编写
			开源、性能优秀、稳定性保障、社区活跃
			与SpringAMQP完美的整合、API丰富
			集群模式丰富,表达式配置,HA模式,镜像队列模型
			保证数据不丢失的前提做到高可靠性、可用性
			AMQP全称:Advanced Message Queuing Protocol
			AMQP翻译:高级消息队列协议
原文链接:https://blog.csdn.net/qq_24095055/article/details/88998542

2.3图文简介。

在这里插入图片描述
RabbitMQ Server:一种传输服务,维护生产者到消费者的路线,保证数据按照指定的方式传输。
Producer:为图中的A、B、C生产者,消息的发送方。
Consumer:为图中的1、2、3消费者,消息的消费方。
Exchange:消息交换器,生产者的消息首先先经过交换器,由交换器路由到一个或多个消息队列(Queue)。交换器有四种类型(direct、fanout、topic、headers)。
Queue:队列,rabbitMQ的内部对象,用于存储消息。
RoutingKey:消息路路由规则,Exchange根据这个规则把消息传给指定队列存储。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值