Rabbit MQ和Spring Boot的整合

消息服务

背景有时需与其它系统集成来完成相关业务功能,原始的做法是程序内部相互调用,除此之外,还可用消息服务中间件来进行业务处理,使用消息服务中间件处理业务能够提升系统的异步通信和扩展解耦的能力,个人有点面向切面的意思

一.为什么要使用消息服务

因为它有很多好处,能解决很多问题;

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

时间: 2024-07-29 04:28:20

Rabbit MQ和Spring Boot的整合的相关文章

Spring Boot 应用系列 5 -- Spring Boot 2 整合logback

上一篇我们梳理了Spring Boot 2 整合log4j2的配置过程,其中讲到了Spring Boot 2原装适配logback,并且在非异步环境下logback和log4j2的性能差别不大,所以对于那些日志量不算太高的项目来说,选择logback更简单方便. 1. pom.xml pom.xml不需要添加任何依赖. 2. logback的配置文件 系统启动时,logback按照下列顺序加载第一个找到的配置文件: (1) classpath: logback-test.xml (2) clas

Spring Boot:整合Swagger在线文档

综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于移动端.在实际开发过程中,这些接口还要提供给开发测试进行相关的白盒测试,那么势必存在如何在多人协作中共享和及时更新API开发接口文档的问题. 假如你已经对传统的wiki文档共享方式所带来的弊端深恶痛绝,那么尝试一下Swagger2 方式,一定会让你有不一样的开发体验. 使用 Swagger 集成文档

Spring Boot:整合MyBatis框架

综合概述 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型.接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录.MyBatis是一款半ORM框架,相对于Hibernate这样的完全ORM框架,MyBatis显得更加灵活,因为可以直接控制SQL语句,所

spring boot 资料整合

spring boot 资料整合 原文地址:https://www.cnblogs.com/lhuser/p/11087410.html

Spring Boot:整合Spring Security

综合概述 Spring Security 是 Spring 社区的一个顶级项目,也是 Spring Boot 官方推荐使用的安全框架.除了常规的认证(Authentication)和授权(Authorization)之外,Spring Security还提供了诸如ACLs,LDAP,JAAS,CAS等高级特性以满足复杂场景下的安全需求.另外,就目前而言,Spring Security和Shiro也是当前广大应用使用比较广泛的两个安全框架. Spring Security 应用级别的安全主要包含两

spring boot+mybatis整合

LZ今天自己搭建了下Spring boot+Mybatis,比原来的Spring+SpringMVC+Mybatis简单好多.其实只用Spring boot也可以开发,但是对于多表多条件分页查询,Spring boot就有点力不从心了,所以LZ把Mybatis整合进去,不得不说,现在的框架搭建真的是方便.话不多说,进入正题. 一.java web开发环境搭建 网上有很多教程,参考教程:http://www.cnblogs.com/Leo_wl/p/4752875.html 二.Spring bo

Spring boot(三)整合mybaties+thymeleaf实现基础crud

工程结构: 首先在pom文件中引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apac

spring boot+kafka整合(未完待续)

springboot版本是2.0.4 在整合过程中,spring boot帮我们把kafka的大部分属性直接带出来了,但是有些不常用的属性,需要通过 spring.kafka.consumer.properties.* 来设置,例如max.partition.fetch.bytes,一次fetch请求,从一个partition中取得的records最大值. 在application.properties中添加kafka扩展属性, #设置一次fetch记录的最大值2M(2*1024*1024),默

Spring Boot:整合Spring Data JPA

综合概述 JPA是Java Persistence API的简称,是一套Sun官方提出的Java持久化规范.其设计目标主要是为了简化现有的持久化开发工作和整合ORM技术,它为Java开发人员提供了一种ORM工具来管理Java应用中的关系数据. 简而言之,JPA提供了使用面向对象的方式操作数据库的功能.JPA充分吸收了现有Hibernate,TopLink,JDO等ORM框架的优势,具有易于使用.伸缩性强等优点. Spring Data JPA是Spring基于Spring Data框架对于JPA