消息中间件
什么是消息中间件?
中间件指处于两个系统之间的软件,消息中间件则是用于处理两个系统之间消息的软件,消息中间件拥有异步通信
、中间件传输
、应用解耦
、流量削峰
的应用点,但是处理消息不是有RestTemplate、WebClient来处理吗,就这两个来说他们应用于同步通信、直接点对点之间通信,当请求足够庞大时,如铁路12306这两种通信方式你觉得足够支撑吗?
为什么使用消息中间件?
首先其处理方式,异步通信代表其具有高速的处理能力,可以提高系统的处理运行能力,避免了同步通信耗时、缓慢的问题,其次应用解耦,降低耦合度是软件开发中极力追求的,消息中间件通过消息队列处理生产的消息,缓解了数据库压力,比如当有十万个订单产生时,将订单扔给消息中间件,消息中间件中的消息队列以自己定义的规则去让下一节点的服务去处理,这样订单系统、库存系统、物流系统之间的耦合度低,且整个架构的压力与数据库压力也得到缓解。
常见的消息中间件
- Kafka:阿帕奇公司开发借鉴于但未完全遵循JMS规范
- RabbitMQ:有Elang语言开发,遵循AMQP标准的开源实现
- RocketMQ:由阿里巴巴开发,孵化于2012年的消息中间件,后捐赠与阿帕奇软件基金会,为完全遵循JMS
- ACtiveMQ:是一种分布式基于发布订阅的消息系统
注:AMQP:Advanced Message Queuing Protocol
跨平台的消息队列,兼容JMS;JMS:Java Message Service
仅限于Java语言。
RabbitMQ
消息从发布到订阅流程:
四种交换器(EXchange)类型:
- direct:直连交换器,它将消息路由到与消息的路由键(Routing Key)完全匹配的队列中。如果消息的路由键与队列的绑定键(Binding Key)相匹配,那么消息将被路由到这个队列
- fanout:扇出交换器,它将接收到的消息广播到与之绑定的所有队列,而不考虑消息的路由键。这意味着无论消息的路由键是什么,消息都将被发送到所有与扇出交换器绑定的队列中。
- topic:主题交换器,主题交换器允许更为灵活的消息路由规则。在主题交换器中,队列和交换器之间的绑定可以使用通配符进行匹配。这些通配符包括
*
(匹配一个单词)和#
(匹配零个或多个单词)。这使得主题交换器能够支持更复杂的消息路由需求。 - headers:消息头交换器,允许绑定时指定一组键值对(headers),当消息的头部信息匹配这些键值对时,消息将被路由到相应的队列。这提供了更为灵活的路由规则。
RabbitMQ客户端
对于整合在项目中使用来说,先弄明白他的图形化界面再说。
-
安装erlang语言环境
apt-get install erlang-nox # 安装erlang
-
安装RabbitMQ客户端
添加公钥
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
更新源
apt-get update
安装mq
apt-get install rabbitmq-server #安装成功自动启动
配置web可视化界面
rabbitmq-plugins enable rabbitmq_management # 启用插件 service rabbitmq-server restart # 重启
开放端口,需开放服务器中对应的端口。
-
创建新用户(非服务器搭建请忽略,本地用户名密码默认为guest/guest)
rabbitmqctl add_user admin yourpassword # 增加普通用户 rabbitmqctl set_user_tags admin administrator # 给普通用户分配管理员角色 rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" # 给用户添加权限
-
创建交换器
在可视化界面以主流的,如上文提到的交换器类型去创建,(3.0以后有默认的消息队列)
-
创建消息队列
在Queues选项卡下创建
- 发送消息、消费消息。
- 登陆成功界面
- 发送消息界面
- 获取消息界面
就到这里,不懒明天我就整合,散会!!!