asp网站的安全性,国外网站视频播放器,晋中网站建设价格,oa软件办公系统#x1f4da;目录 #x1f4da;简介:#x1f680;比较#x1f4a8;通常注册#x1f308;优化后注册 ✍️代码#x1f4ab;自动注册的关键代码 #x1f4da;简介: 该项目介绍#xff0c;rabbitMq消息中间件#xff0c;对队列的注册#xff0c;交换机的注册#xff0c… 目录 简介:比较通常注册优化后注册 ✍️代码自动注册的关键代码 简介: 该项目介绍rabbitMq消息中间件对队列的注册交换机的注册队列与交换机的绑定关系进行注册这三个步骤进行简化通过枚举的配置完成这些操作。可以参考之前写的文章SpringBoot整合Rabbitmq
比较
通常注册 通常我们创建一个队列至少三个步骤 声明队列声明交换机队列绑定到交换机上并且且设置路由关键字 优化后注册 我们只需要关注我们的队列枚举里面已经定义好了通用配置只有队列名称交换机交换机类型的指定我们需要自己定义外之后的注册不需要你们关注即可完成。 ✍️代码
自动注册的关键代码 RabbitMqConfig 代码的运行逻辑
应用启动当 Spring Boot 应用启动时RabbitAdmin Bean 会被初始化并启动。队列和交换机的创建在 createQueue 方法中代码会遍历所有的队列枚举将每个队列的相关配置如交换机类型、持久性等传递给相应的方法创建所需的队列和交换机。完成配置一旦所有的交换机和队列创建完成它们之间的绑定关系也会被设置好从而确保消息可以在它们之间正确地流动。
/*** author itmei*/
Configuration
public class RabbitMqConfig {///**// * 声明队列// * return// *///Bean//public Queue directQueue(){// //持久 - 如果我们声明一个持久队列则为真该队列将在服务器重启后继续存在// return new Queue(RabbitMqQueueEnum.DEFAULT_DIRECT.getQueueName(),false);//}/////**// * 声明交换机// * return// *///Bean//public DirectExchange directExchange(){// //交换器名称、是否持久化、是否自动删除// return new DirectExchange(RabbitMqQueueEnum.DEFAULT_DIRECT.getExchangeName(),true,false);//}/////***// * 队列绑定到交换机上// * 并且设置路由关键字// *///Bean//public Binding binding(Queue queue,DirectExchange exchange){// return BindingBuilder.bind(queue).to(exchange).with(RabbitMqQueueEnum.DEFAULT_DIRECT.getRoutingKey());//}/*** 用于动态创建队列和交换机* param rabbitTemplate rabbitMq的模板对象* return*/Beanpublic RabbitAdmin rabbitAdmin(RabbitTemplate rabbitTemplate){RabbitAdmin rabbitAdmin new RabbitAdmin(rabbitTemplate);//默认就是truerabbitAdmin.setAutoStartup(true);return rabbitAdmin;}/*** 绑定* param rabbitAdmin RabbitAdmin 实例用于管理队列和交换机的声明* return*/Bean(createQueue)public Object createQueue(RabbitAdmin rabbitAdmin) {// 遍历队列枚举RabbitMqQueueEnum.toList().forEach(rabbitMqQueueEnum - {//创建交换机createExchangeHandle(rabbitAdmin,rabbitMqQueueEnum);// 创建对列createQueueHandle(rabbitAdmin,rabbitMqQueueEnum);// 绑定交换机和对列createBindingHandle(rabbitAdmin,rabbitMqQueueEnum);});return null;}/*** 注册交换机的方法根据传入的队列枚举配置创建相应类型的交换机。* param rabbitAdmin RabbitAdmin 实例用于管理队列和交换机的声明* param rabbitMqQueueEnum 自定义队列枚举包含交换机的配置信息包含交换机的配置信息*/private void createExchangeHandle(RabbitAdmin rabbitAdmin, RabbitMqQueueEnum rabbitMqQueueEnum) {// 获取当前队列的交换机配置ExchangeConfigEnum exchangeConfigEnum rabbitMqQueueEnum.getExchangeConfigEnum();String exchangeName rabbitMqQueueEnum.getExchangeName();// 检查是否为延迟交换机if (rabbitMqQueueEnum.isDelayedExchange()) {// 创建并声明延迟交换机rabbitAdmin.declareExchange(new CustomDelayedExchange(// 交换机名称exchangeName,// 交换机是否持久化exchangeConfigEnum.isDurable(),// 交换机是否自动删除exchangeConfigEnum.isAutoDelete(),// 交换机类型exchangeConfigEnum.getType().name().toLowerCase()));} else {// 创建并声明普通交换机createStandardExchange(rabbitAdmin, exchangeName, exchangeConfigEnum);}}/*** 创建并声明标准交换机的方法。* param rabbitAdmin RabbitAdmin 实例用于声明交换机* param exchangeName 交换机的名称* param exchangeConfigEnum 交换机的配置枚举包含持久化和自动删除等信息*/private void createStandardExchange(RabbitAdmin rabbitAdmin, String exchangeName, ExchangeConfigEnum exchangeConfigEnum) {AbstractExchange exchange;// 根据交换机类型创建对应的交换机实例switch (exchangeConfigEnum.getType()) {case FANOUT:// 创建 Fanout 交换机exchange new FanoutExchange(exchangeName, exchangeConfigEnum.isDurable(), exchangeConfigEnum.isAutoDelete());break;case TOPIC:// 创建 Topic 交换机exchange new TopicExchange(exchangeName, exchangeConfigEnum.isDurable(), exchangeConfigEnum.isAutoDelete());break;case DIRECT:// 创建 Direct 交换机exchange new DirectExchange(exchangeName, exchangeConfigEnum.isDurable(), exchangeConfigEnum.isAutoDelete());break;default:// 不支持的交换机类型直接返回return;}// 声明创建的交换机rabbitAdmin.declareExchange(exchange);}/*** 注册队列* param rabbitAdmin RabbitAdmin 实例用于管理队列和交换机的声明* param rabbitMqQueueEnum 自定义队列枚举包含交换机的配置信息*/public void createQueueHandle(RabbitAdmin rabbitAdmin, RabbitMqQueueEnum rabbitMqQueueEnum) {QueueConfigEnum queueEnum rabbitMqQueueEnum.getQueueConfigEnum();rabbitAdmin.declareQueue(new Queue(rabbitMqQueueEnum.getQueueName(),queueEnum.isDurable(), queueEnum.isExclusive(), queueEnum.isAutoDelete(), queueEnum.getArguments()));}/*** 注册绑定关系* param rabbitAdmin RabbitAdmin 实例用于管理队列和交换机的声明* param rabbitMqQueueEnum 自定义队列枚举包含交换机的配置信息*/public void createBindingHandle(RabbitAdmin rabbitAdmin, RabbitMqQueueEnum rabbitMqQueueEnum) {// 绑定rabbitAdmin.declareBinding(new Binding(// queue名称rabbitMqQueueEnum.getQueueName(),Binding.DestinationType.QUEUE,// exchange名称rabbitMqQueueEnum.getExchangeName(),// queue的routingKeyrabbitMqQueueEnum.getRoutingKey(),null));}/*** 用于创建延迟队列的交换机*/public static class CustomDelayedExchange extends CustomExchange {public CustomDelayedExchange(String name, boolean durable, boolean autoDelete, String delayedType) {super(name, x-delayed-message, durable, autoDelete, Collections.singletonMap(x-delayed-type, delayedType));}}
}交换机枚举配置 /*** Author itmei*/
Getter
AllArgsConstructor
public enum ExchangeConfigEnum {/*** 直接模式*/DIRECT_EXCHANGE(ExchangeModelEnum.DIRECT, true, false),/*** 匹配模式*/TOPIC_EXCHANGE(ExchangeModelEnum.TOPIC, true, false),;/*** 模式*/private final ExchangeModelEnum type;/*** 是否持久化*/private final boolean durable;/*** 是否自动删除*/private final boolean autoDelete;}交换机枚举类型 /*** Author itmei*/
Getter
AllArgsConstructor
public enum ExchangeModelEnum {/*** 广播*/FANOUT,/*** 匹配*/TOPIC,/*** 直接模式*/DIRECT
}默认队列配置 /*** author itmei*/
Getter
AllArgsConstructor
public enum QueueConfigEnum {/*** 自定义的队列配置*/DEFAULT_QUEUE_CONFIG(true, false, false, null),;/*** 是否为持久队列(该队列将在服务器重启后保留下来)*/private final boolean durable;/*** 是否为排他队列(该队列仅由声明者的队列使用连接)*/private final boolean exclusive;/*** 如果队列为空是否删除(如果服务器在不再使用队列时是否删除队列)*/private final boolean autoDelete;/*** queue的参数*/private final MapString, Object arguments;}自定义队列配置以后只需要把队列增加到这里即可 /*** author itmei*/
Getter
AllArgsConstructor
public enum RabbitMqQueueEnum {/*** 自定义的队列与交换机的关系*/DEFAULT_DIRECT(direct_itmei_exchange,direct.itmei.exchange.default.queue,direct.itmei.exchange.default.queue,ExchangeConfigEnum.DIRECT_EXCHANGE,QueueConfigEnum.DEFAULT_QUEUE_CONFIG,true,默认队列),DEFAULT_TEST_DIRECT(direct_itmei_exchange,direct.itmei.exchange.test.queue,direct.itmei.exchange.test.queue,ExchangeConfigEnum.DIRECT_EXCHANGE,QueueConfigEnum.DEFAULT_QUEUE_CONFIG,true,测试对列),;/*** 交换机名称*/private final String exchangeName;/*** 队列名称(每个队列的名称应是唯一的)*/private final String queueName ;/*** 默认保持和对列名称一样模式为 topic时需要注意匹配符设置* 队列路由键(* 注意匹配#匹配一个或者多个,*匹配一个* 如 abc.new.n , abc.new.n.m* abc.new.# 匹配{abc.new.n,abc.new.n.m}* abc.new.* 匹配{abc.new.n}* )*/private final String routingKey;/*** 交换机的配置*/private final ExchangeConfigEnum exchangeConfigEnum;/*** 对列的配置*/private final QueueConfigEnum queueConfigEnum;/*** 是否是延迟交换机 如果已经存在不是延迟交换机则需要删除再标记* treu:延迟交换机 false:普通交换机*/private final boolean delayedExchange;/*** 描述*/private final String desc;public static ListRabbitMqQueueEnum toList() {return Arrays.asList(RabbitMqQueueEnum.values());}}
文章转载自: http://www.morning.mnjyf.cn.gov.cn.mnjyf.cn http://www.morning.sbwr.cn.gov.cn.sbwr.cn http://www.morning.bnfjh.cn.gov.cn.bnfjh.cn http://www.morning.rfwqt.cn.gov.cn.rfwqt.cn http://www.morning.hhqjf.cn.gov.cn.hhqjf.cn http://www.morning.cprbp.cn.gov.cn.cprbp.cn http://www.morning.ccdyc.cn.gov.cn.ccdyc.cn http://www.morning.crsqs.cn.gov.cn.crsqs.cn http://www.morning.tfbpz.cn.gov.cn.tfbpz.cn http://www.morning.rkqkb.cn.gov.cn.rkqkb.cn http://www.morning.prjns.cn.gov.cn.prjns.cn http://www.morning.jypsm.cn.gov.cn.jypsm.cn http://www.morning.qrhh.cn.gov.cn.qrhh.cn http://www.morning.hlshn.cn.gov.cn.hlshn.cn http://www.morning.gxcit.com.gov.cn.gxcit.com http://www.morning.hsgxj.cn.gov.cn.hsgxj.cn http://www.morning.qiyelm.com.gov.cn.qiyelm.com http://www.morning.mzwqt.cn.gov.cn.mzwqt.cn http://www.morning.xldpm.cn.gov.cn.xldpm.cn http://www.morning.nlzpj.cn.gov.cn.nlzpj.cn http://www.morning.zbmcz.cn.gov.cn.zbmcz.cn http://www.morning.cctgww.cn.gov.cn.cctgww.cn http://www.morning.qbtkg.cn.gov.cn.qbtkg.cn http://www.morning.rfrnc.cn.gov.cn.rfrnc.cn http://www.morning.ytnn.cn.gov.cn.ytnn.cn http://www.morning.nlgmr.cn.gov.cn.nlgmr.cn http://www.morning.xldpm.cn.gov.cn.xldpm.cn http://www.morning.jbqwb.cn.gov.cn.jbqwb.cn http://www.morning.haibuli.com.gov.cn.haibuli.com http://www.morning.wmfmj.cn.gov.cn.wmfmj.cn http://www.morning.jpbky.cn.gov.cn.jpbky.cn http://www.morning.xnqwk.cn.gov.cn.xnqwk.cn http://www.morning.prkdl.cn.gov.cn.prkdl.cn http://www.morning.crqpl.cn.gov.cn.crqpl.cn http://www.morning.xnqwk.cn.gov.cn.xnqwk.cn http://www.morning.drqrl.cn.gov.cn.drqrl.cn http://www.morning.xnrgb.cn.gov.cn.xnrgb.cn http://www.morning.blqsr.cn.gov.cn.blqsr.cn http://www.morning.npbkx.cn.gov.cn.npbkx.cn http://www.morning.hmpxn.cn.gov.cn.hmpxn.cn http://www.morning.jhqcr.cn.gov.cn.jhqcr.cn http://www.morning.rnpt.cn.gov.cn.rnpt.cn http://www.morning.pqjpw.cn.gov.cn.pqjpw.cn http://www.morning.nwgkk.cn.gov.cn.nwgkk.cn http://www.morning.pmjw.cn.gov.cn.pmjw.cn http://www.morning.slnz.cn.gov.cn.slnz.cn http://www.morning.yfqhc.cn.gov.cn.yfqhc.cn http://www.morning.lpsjs.com.gov.cn.lpsjs.com http://www.morning.bpwz.cn.gov.cn.bpwz.cn http://www.morning.fpjxs.cn.gov.cn.fpjxs.cn http://www.morning.rgtp.cn.gov.cn.rgtp.cn http://www.morning.htmhl.cn.gov.cn.htmhl.cn http://www.morning.mkfhx.cn.gov.cn.mkfhx.cn http://www.morning.rnzbr.cn.gov.cn.rnzbr.cn http://www.morning.attorneysportorange.com.gov.cn.attorneysportorange.com http://www.morning.lmpfk.cn.gov.cn.lmpfk.cn http://www.morning.rwbh.cn.gov.cn.rwbh.cn http://www.morning.kqcqr.cn.gov.cn.kqcqr.cn http://www.morning.mtrrf.cn.gov.cn.mtrrf.cn http://www.morning.rghkg.cn.gov.cn.rghkg.cn http://www.morning.fdmfn.cn.gov.cn.fdmfn.cn http://www.morning.fbnsx.cn.gov.cn.fbnsx.cn http://www.morning.rnwmp.cn.gov.cn.rnwmp.cn http://www.morning.tmlhh.cn.gov.cn.tmlhh.cn http://www.morning.lpgw.cn.gov.cn.lpgw.cn http://www.morning.dnhdp.cn.gov.cn.dnhdp.cn http://www.morning.cctgww.cn.gov.cn.cctgww.cn http://www.morning.jqhrk.cn.gov.cn.jqhrk.cn http://www.morning.nxcgp.cn.gov.cn.nxcgp.cn http://www.morning.wqcbr.cn.gov.cn.wqcbr.cn http://www.morning.yckwt.cn.gov.cn.yckwt.cn http://www.morning.srkwf.cn.gov.cn.srkwf.cn http://www.morning.mwpcp.cn.gov.cn.mwpcp.cn http://www.morning.dyxzn.cn.gov.cn.dyxzn.cn http://www.morning.bwmm.cn.gov.cn.bwmm.cn http://www.morning.mmtjk.cn.gov.cn.mmtjk.cn http://www.morning.ylzdx.cn.gov.cn.ylzdx.cn http://www.morning.kskpx.cn.gov.cn.kskpx.cn http://www.morning.pzbqm.cn.gov.cn.pzbqm.cn http://www.morning.kxbdm.cn.gov.cn.kxbdm.cn