消息服务
背景:有时需与其它系统集成来完成相关业务功能,原始的做法是程序内部相互调用,除此之外,还可用消息服务中间件来进行业务处理,使用消息服务中间件处理业务能够提升系统的异步通信和扩展解耦的能力,个人有点面向切面的意思。
一.为什么要使用消息服务?
因为它有很多好处,能解决很多问题;
1.异步处理
2.流量消峰
3.提高效率和可靠性
二、RabbitMQ消息中间件的原理和工作模式
RabbitMQ消息中间件的原理:
1.消息发布者P向RabbitMQ代理(Broker)指定虚拟主机服务器发送消息。
2.虚拟主机服务器内部交换器接收消息,并将消息传递并存储到与之邦定的消息队列中。
3.消息消费者通过网络连接与消息代理建立连接。并且为了简化开发,在连接内部使用了多路复用的信道进行消息的最终消费。
消息中间件的工作模式的分类、具体的实现步骤、适用场景
工作模式:Publish/Subscrib(发布订阅模式)
step1.先配置一个fanout类型的交换器。
step2.不需指定对应的路由键,同时会将消息路由到每一个消息队列。
step3.每个队列都可以对不同的消息进行接收存储,进而各自消息队列关联的消费者进行消费。
适用场景:相同业务功能处理的场合。如用户注册成功后,同时给该用户发送邮件和短信,使得该功能增强,所以也有点面向切面的意思。
Routing(路由模式)
1.先配置一个direct类型的转换器;
2.制定不同的路由键值将对应的消息从路由器路由到不同的消息队列中存储,再由各自消费者消费。
适用场景:进行不同类型消息分类处理场合。如日志收集处理,用户可以配置不同的路由键值分别对不同级别日志信息进行分类处理。
Topics(通配符模式)
该原理类似于路由模式,只是先要配置topic类型的转换器,并制定不同的路由兼职将对应的消息从路由器路由到不同消息队列,再由消费者各自消费。不同的是Topics模式设置的路由建是包含通配符的,其中,#匹配多个字符,*匹配一个字符,然后与其它字符一起使用“.”进行连接,从而组成动态路由键,从而将消息路由到不同的消息队列。
适用场景:使用于不同的需求动态传递处理业务的场合。一些订单客户只收邮件消息,一些订阅客户只接收短信消息。那么可以根据需求进行动态路由匹配,从而将订阅消息分发到不同的消息队列中。
RPC
原理是客户端发送消息到消息队列,远程服务端获取消息,然后做一定的处理并写入到另一个消息队列中,最后再向客户端发送响应消息处理结果。
适用场景:用于远程服务调用的业务处理场合。在分布式交给中需考虑分布式事务管理问题。
三、Spring Boot整合Rabbit MQ
整合方式分类:1.基于API的方式; 2.基于配置类的方式;3.基于注解的方式;
工作模式的选用: Publish/Subscribe、Routing、Topics工作模式;
Publish/Subscribe的工作组成: 1.定制中间件; 2.消息发送者发送消息; 3.消息消费者接收消息。
e.g: 用户注册成功后同时发送邮件通知和消息通知为例。
API管理类AmqpAdmin定制消息发送组件,并进行消息发送。这种定制消息的发送组件的方式与在RabbitMQ开始界面上通过对应面板进行组件操作的实现基本一样,都是通过管理员的身份,预先手动声明交换器、队列、路由键等,然后组装消息队列供应用程序调用,从而实现消息服务。下面我们就对这种基于API的方式进行讲解和演示。
2.基于配置类的方式
基于配置类的方式主要是使用Spring Boot框架提供的@Configuration注解配置类定制的消息发送组件,并进行消息发送。
3.基于注解的方式
…
Routing(路由模式)
以不同的级别日志信息采集处理这一场景,使用基于注解的方式实现Routing路由模式的整合讲解。
3.1)使用基于注解的方式定制消息组件和消息消费模式
打开进行消息接受和处理的业务类RabbitMQService,在该类中使用@RabbitLister注解及其相关属性定制Routing路由模式的消息组件,并模拟编写消息消费者接收方法。
3 通配符模式
针对不同用户对邮件和短信的订阅需求这一场景为例,使用基于注解的方式实现Topics通配符模式于Spring Boot的整合。
未完待补充...
来源:https://www.cnblogs.com/shijinglu2018/p/12234054.html