当前位置: 首页 > news >正文

流量多网站服务推广软文

流量多网站,服务推广软文,今日南昌疫情最新要求,英文网站模版文章目录 需求背景案例说明实现方案 需求背景 由于目前公司项目是面向政企单位,所以项目部署方案采用了私有云模式,而每个地区的客户要求的中间件存在差异,为了实现基础框架和业务代码的复用,需要实现一套基础框架同时引入多个同…

文章目录

  • 需求背景
  • 案例说明
  • 实现方案

需求背景

由于目前公司项目是面向政企单位,所以项目部署方案采用了私有云模式,而每个地区的客户要求的中间件存在差异,为了实现基础框架和业务代码的复用,需要实现一套基础框架同时引入多个同类型的中间件,基于配置实现底层组件切换,并且禁用未开启组件的自启动

案例说明

这里以MQ为例,我们同时引入rabbitmq、rocketmq和cmq,基于配置framework.mq.rocketmq.type实现不同mq的切换,默认使用rabbitmq,切换时只有启用类型的mq才会触发自动装配连接和健康检查

备注:如果只是单纯同时引入多个组件依赖,项目启动阶段未配置连接资源的组件会提示连接异常或者类装载冲突
在这里插入图片描述

实现方案

1.以starter组件形式定义组件,通过spring.factories声明组件初始化对象和配置文件,这里不详细描述
在这里插入图片描述
2.在starter内引入rabbitmq、rocketmq和cmq的starter依赖

<!-- cmq -->
<dependency><groupId>com.bosssoft.gp</groupId><artifactId>starter-gp-stream-client</artifactId><version>V5.0.7.4.Release</version>
</dependency>
<!-- rabbit-mq -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-amqp</artifactId>
</dependency>
<!-- rocketmq-mq -->
<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.3.2</version>
</dependency>

3.在组件内排除掉rabbitmq、rocketmq和cmq的AutoConfiguration对象,这样在spring容器加载时就不会自启动对应组件,也不会在项目启动阶段去连接对应mq(cmq采用手动创建监听器,不会触发自启动可以不处理)
3.1.可以在starter内通过yml文件声明:

spring:autoconfigure:exclude: org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration

3.2.也可以通过@EnableAutoConfiguration的exclude实现排包

import org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
import org.springframework.context.annotation.Configuration;
/*** @author: xielijie* @className: MqConfig* @description:这里独立配置是因为其他config类都被spring.factories声明,添加@EnableAutoConfiguration会提示异常* @date: 2025-03-07 14:31**/
@Configuration
@Configuration
//#在配置中把默认的RabbitMQ/RocketMQ自动配置类排除掉, 再通过自定义配置开关控制装载RabbitMQ/RocketMQ, 实现rabbitMq/RocketMQ自动装配自定义开关
@EnableAutoConfiguration(exclude = {RabbitAutoConfiguration.class, RocketMQAutoConfiguration.class, MqClientConfiguration.class})
public class MqExcludeAutoConfiguration {}

3.3.这里延伸个场景,有部分三方组件,比如tomcat,由于配置加载优先级较高,导致在自定义的starter组件内用exclude属性排包太晚加载导致排包不生效(直接在项目的application内声明是有效的,但是组件化声明失效),可以采用自定义配置并且优先加载的方案

@Configuration
@PropertySource(value = "classpath:application-web.yml",encoding = "utf-8",factory = DefaultConfigFactory.class)
@ComponentScan(basePackages = {"com.bosssoft.gpmscloud"})
@Slf4j
public class GpmsCloudWebMvcAutoConfiguration implements EnvironmentPostProcessor {@Overridepublic void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {MutablePropertySources propertySources = environment.getPropertySources();Map<String, Object> properties = new HashMap<>();properties.put("spring.autoconfigure.exclude","org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration,com.bosssoft.gp.stream.client.starter.MqClientConfiguration,com.bosssoft.gp.stream.client.starter.MqClientConfiguration");// 添加到属性源中,优先级设置为较高MapPropertySource propertySource = new MapPropertySource("mqContainerExcludeProperties", properties);propertySources.addFirst(propertySource);}}

4.基于配置动态加载mq实现
rabbitmq,默认开启

@Configuration
@ConditionalOnProperty(prefix = "framework.mq", name = "type", havingValue = "rabbitmq", matchIfMissing = true)
public class CustomRabbitAutoConfiguration extends RabbitAutoConfiguration {}

rocketmq

@Configuration
@ConditionalOnProperty(prefix = "framework.mq", name = "type", havingValue = "rabbitmq")
public class CustomRocketAutoConfiguration extends RocketMQAutoConfiguration {public CustomRocketAutoConfiguration(Environment environment) {super(environment);}
}

cmq

@Configuration
@ConditionalOnProperty(prefix = "framework.mq", name = "type", havingValue = "cmq")
public class CustomCmqAutoConfiguration extends MqClientConfiguration {}

5.发送和监听器业务代码需要基于配置加载
ps:
在这里插入图片描述
6.业务使用
以此,业务服务在引入我们自定义的framework-starter-mq模块后,就可以通过framework.mq.rocketmq.type配置来切换不同的mq组件,业务模块对于mq的消费和发生可以根据@ConditionalOnProperty(prefix = “framework.mq.xxx”, name = “enabled”, havingValue = “true”)来实现实现切换
其他同类型三方组件接入也可以采用该思路来实现自定义的动态加载组件

http://www.yidumall.com/news/83586.html

相关文章:

  • 网站注册免费百度公司网站推广怎么做
  • vps网站目录是灰色的百度文库网页版
  • 如何在微信公众号添加wordpressseo关键词挖掘
  • 网站根目录是哪个文件夹2022百度seo优化工具
  • 长安网站建设详细教程企业网站建站模板
  • 考试源码网站wordpress网站权重查询
  • 海南网站建设公司长沙网站seo优化排名
  • 佳作哪个公司做网站比较好百度新闻首页
  • 现代建设公司网站个人网页制作教程
  • 做情诗网站百度竞价排名商业模式
  • 菜鸟如何做网站公众号怎么做文章推广
  • 福州建设局网站可以免费做网站推广的平台
  • 做网站的流程视频教程重庆seo博客
  • 机械做卖产品网站收录优美图片app
  • 图片在线制作生成器免费泰安seo网络公司
  • 网站建设市场拓展岗位关键词优化公司如何选择
  • 目字形布局结构的网站今日头条热搜榜前十名
  • 做5g网站广州网络推广
  • 做ppt模板网站电脑编程培训学校哪家好
  • 怎样做独立网站微信最好用的营销软件
  • 自己网站视频直播怎么做广东seo
  • 青岛企业网站建设优化aso关键词排名优化是什么
  • dedecms 做微网站千万不要去电商公司上班
  • 数据库支持的网站怎么做友情链接买卖平台
  • 电商网站如何做优化网站优化和网站推广
  • 网站建设内容方法搜索引擎内部优化
  • 网站制作 深圳新乡网站seo
  • 销售网站平台怎么做的深圳网站建设公司官网
  • 哎呀哎呀在线观看视频高清国语关键词优化系统
  • 注册一个公司需要多少钱?东莞做网站优化