微服务框架SpringcloudAlibaba+Nacos集成RabbiMQ

目前公司使用jeepluscloud版本,这个版本没有集成消息队列,这里记录一下,集成的过程;这个框架跟ruoyi的那个微服务版本结构一模一样,所以也可以快速上手。

1.项目结构图:

配置类的东西做成一个公共的模块

在这里插入图片描述

rabbitmq模块:

在这里插入图片描述

2.核心配置

1.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.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>jeeplus-common</artifactId><groupId>org.jeeplus</groupId><version>${revision}</version></parent><modelVersion>4.0.0</modelVersion><artifactId>jeeplus-common-rabbitmq</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.jeeplus</groupId><artifactId>jeeplus-common-core</artifactId><version>${project.parent.version}</version></dependency></dependencies>
</project>

2.ConditionalOnRabbit

package com.jeeplus.common.rabbit.conditional;import org.springframework.context.annotation.Conditional;import java.lang.annotation.*;/*** 判断系统是否在启用了Rabbit, 未启用的情况下不将Bean注册到系统中** 使用场景: 在不使用Rabbit中间件但未去除Rabbit依赖的情况下, 通过配置文件中关闭Rabbit选项,* 同时将这个注解到有`@RabbitListener`标志的类上,让这个对象不注册到Spring容器中,* 从而避免`RabbitMQ`进行无限尝试重连服务器,导致项目一直抛出异常,影响开发和使用。** @author xxm* @since 2022/12/12*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(OnRabbitEnable.class)
public @interface ConditionalOnRabbit {}

3.OnRabbitEnable

package com.jeeplus.common.rabbit.conditional;import com.jeeplus.common.rabbit.configuration.RabbitMqProperties;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;/*** 判断是否在启用了Rabbit, 用来控制在没启用Rabbit情况下. 不将 @RabbitListener 修饰的监听器注册为Bean, 不然会导致无限尝试重连** @author xxm* @since 2022/12/12*/
public class OnRabbitEnable implements Condition {private final String rabbitPropertiesPrefix = "com.jeeplus.common.rabbit";/*** @param context* @param metadata* @return*/@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {RabbitMqProperties rabbitMqProperties = Binder.get(context.getEnvironment()).bind(rabbitPropertiesPrefix, RabbitMqProperties.class).orElse(new RabbitMqProperties());return rabbitMqProperties.isEnable();}}

4.BootxRabbitListenerConfigurer

package com.jeeplus.common.rabbit.configuration;import lombok.RequiredArgsConstructor;
import org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer;
import org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistrar;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory;/*** Rabbit 侦听器配置器** @author xxm* @since 2021/6/25*/
@Configuration
@RequiredArgsConstructor
public class BootxRabbitListenerConfigurer implements RabbitListenerConfigurer {private final DefaultMessageHandlerMethodFactory jsonHandlerMethodFactory;@Overridepublic void configureRabbitListeners(RabbitListenerEndpointRegistrar registrar) {registrar.setMessageHandlerMethodFactory(jsonHandlerMethodFactory);}}

5.BootxRabbitListenerConfigurer

package com.jeeplus.common.rabbit.configuration;import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory;/*** 消息队列配置** @author xxm* @since 2021/6/25*/
@EnableRabbit
@Configuration
public class RabbitMqConfigurer {/*** 注册 RabbitTemplate 对象, 使用默认序列化方式*/@Beanpublic RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, ObjectMapper objectMapper) {RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);// 使用系统同版jackson 序列化配置rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter(objectMapper));return rabbitTemplate;}/*** 添加默认消息序列化方式, 使用默认序列化方式*/@Beanpublic DefaultMessageHandlerMethodFactory jsonHandlerMethodFactory(ObjectMapper objectMapper) {DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();// 这里的转换器设置实现了 通过 @Payload 注解 自动反序列化message bodyMappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();converter.setObjectMapper(objectMapper);factory.setMessageConverter(converter);return factory;}}

6.RabbitMqConfigurer

package com.jeeplus.common.rabbit.configuration;import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory;/*** 消息队列配置** @author xxm* @since 2021/6/25*/
@EnableRabbit
@Configuration
public class RabbitMqConfigurer {/*** 注册 RabbitTemplate 对象, 使用默认序列化方式*/@Beanpublic RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, ObjectMapper objectMapper) {RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);// 使用系统同版jackson 序列化配置rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter(objectMapper));return rabbitTemplate;}/*** 添加默认消息序列化方式, 使用默认序列化方式*/@Beanpublic DefaultMessageHandlerMethodFactory jsonHandlerMethodFactory(ObjectMapper objectMapper) {DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();// 这里的转换器设置实现了 通过 @Payload 注解 自动反序列化message bodyMappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();converter.setObjectMapper(objectMapper);factory.setMessageConverter(converter);return factory;}}

7.RabbitMqProperties

package com.jeeplus.common.rabbit.configuration;import com.jeeplus.common.rabbit.conditional.ConditionalOnRabbit;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;/*** MQTT配置** @author xxm* @since 2022/12/12*/
@Getter
@Setter
@ConfigurationProperties("com.jeeplus.common.rabbit")
public class RabbitMqProperties {/*** 是否开启 RabbitMQ功能,* @see ConditionalOnRabbit 配合此注解使用*/private boolean enable = false;}

8.RabbitMqCommonAutoConfiguration

package com.jeeplus.common.rabbit;import org.springframework.boot.autoconfigure.SpringBootApplication;/*** RabbitMQ配置** @author xxm* @since 2022/5/3*/
@SpringBootApplication
public class RabbitMqCommonAutoConfiguration {}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/154854.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win11系统自带便利签

步骤如下&#xff1a; 在搜索框输入 便笺 2. 打开及用。

CGAL+QT

先安装CGAL和QT 安装完QT其中MSVC 这两个没配置 1、x32配置选择的是 x64配置选择的是 2、CGAL 5.4.5 - Manual: Using CGAL on Windows (with Visual C) 参数文章配置一些环境变量 3、 测试 新建build 进行cmake QT、Boost、CGAL都自动匹配上了&#xff08;环境变量已经配…

Tigger绕过激活锁/屏幕锁隐藏工具,支持登入iCloud有消息通知,支持iOS12.0-14.8.1。

绕过激活锁工具Tigger可以用来帮助因为忘记自己的ID或者密码而导致iPhone/iPad无法激活的工具来绕过自己的iPhone/iPad。工具支持Windows和Mac。 工具支持的功能&#xff1a; 1.Hello界面两网/三网/无基带/乱码绕过&#xff0c;可以完美重启&#xff0c;支持iCloud登录、有消…

PCL setCameraPosition 参数讲解

setCameraPosition 的原型如下void setCameraPosition (double pos_x, double pos_y, double pos_z,double view_x, double view_y, double view_z,double up_x, double up_y, double up_z, int viewport 0);pos_x pos_y pos_z为相机所在的位置view_x view_y view_z 是焦点所…

MaxQuant的安装和使用(linux OR windows)

目录 1. 安装2. 用法2.1 命令行方式&#xff08;linux&#xff09;2.2 GUI方式&#xff08;windows&#xff09;1) completeAndromeda配置/Configuration&#xff08;2&#xff09;数据上传/Raw files (14)组特异参数/Group-specific parameters&#xff08;17&#xff09;全局…

大模型该被知道的技术实现-面向垂直领域

一个高度清晰的思维导图截图奉上&#xff08;下载&#xff1a;需3积分&#xff09; 内容截图

ICC2: 如何在显示GUI操作产生的命令

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 ICC2&#xff1a;自定义快捷键和菜单 VIEW -> Perference -> Global Settings 把display commands in logging console 下面几个都勾上即可。

【Linux】虚拟机项目部署与发布

目录 一、Linux部署单机项目 1.1 优缺点 1.2 将项目共享到虚拟机 1.3 解压后将war包放入tomcat 1.4 数据库导入脚本 1.5 Tomcat启动项目 二、部署前后端分离项目 2.1 准备工作 2.2 部署SPA项目 2.2.1 nginx反向代理 2.2.2 SPA项目宿主机访问 一、Linux部署单机项目…

How to install the console system of i-search rpa on Centos 7

How to install the console system of i-search rpa on Centos 7 1、 准备1.1 、查看磁盘分区状态1.2、上传文件1.2.1、添加上传目录1.2.2、上传安装包1.2.3、解压安装包1.2.4、查看安装包结构 1.3、安装依赖包1.3.1、基础依赖包1.3.2 相关依赖 1.4、关闭防火墙1.5、解除SeLin…

外网远程登录之 NAT server

案例&#xff1a; 外网远程登录内网SW&#xff1a; 需求 1.内网的PC都可以访问Server1 2.外网的R2可以远程登录SW1&#xff0c; 用户名和密码是&#xff1a;HCIE/hehe 需求 1.内网的PC都可以访问Server1 2.外网的R2可以远程登录SW1&#xff0c; 用户名和密码是&#xff1a;HCI…

基于计算机视觉的 Transformer 研究进展

论文地址&#xff1a; https://kns.cnki.net/kcms/detail/11.2127.tp.20211129.1135.004.html 18页&#xff0c;74篇参考文献 目录 摘 要 1 Transformer 基本原理 1.1 编码器-解码器 1.2 自注意力 1.3 多头注意力 2 在计算机视觉领域的应用 2.1 图像分类 2.1.1 iGPT …

医院能耗管控平台,医院节能降耗的有效利器

随着人们对医院舒适度要求的不断提升&#xff0c;医院采用新技术及信息化建设等手段来提升服务&#xff0c;导致能源使用效率高&#xff0c;医院能耗管控平台可以帮助医院在运行的基础上&#xff0c;促进医院节能降耗等工作。 医院目前存在的问题 1、医院人口密度大、用能系统…