做博客网站怎么赚钱,济南网站建设方案,网站顶部,品牌推广理论有哪些背景 实际项目中遇到针对不同类型的消息#xff0c;发送消息到不同的队列#xff0c;而且队列可能还不存在#xff0c;需要动态创建#xff0c;于是写了如下代码#xff0c;实践发现没啥问题#xff0c;这里分享下。 环境
springboot 3.2 JDK 17
rabbitMQ模型介绍 图片…背景 实际项目中遇到针对不同类型的消息发送消息到不同的队列而且队列可能还不存在需要动态创建于是写了如下代码实践发现没啥问题这里分享下。 环境
springboot 3.2 JDK 17
rabbitMQ模型介绍 图片来自参考链接表中的一篇介绍
注意下面例子用到的是Direct模型
依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-amqp/artifactId
/dependency配置
spring.rabbitmq.hostxxx
spring.rabbitmq.port5672
spring.rabbitmq.usernamexxx
spring.rabbitmq.passwordxxx
spring.rabbitmq.virtual-host/
#开启发布确认回调
spring.rabbitmq.publisher-confirm-typecorrelated
spring.rabbitmq.publisher-returnstrue
spring.rabbitmq.listener.simple.retry.enabledtrue
spring.rabbitmq.listener.simple.retry.max-attempts3
spring.rabbitmq.listener.simple.retry.initial-interval10000ms关键代码 Resourceprivate ConnectionFactory connectionFactory;//这里指定一个exchange之后会根据routeKey动态绑定不同的队列Value(${rabbitmq.msgExchangeName:MsgExchange})private String registerExchangeName;Testvoid contextLoads() {}Testvoid testMQ(){try (Connection connection connectionFactory.createConnection();Channel channel connection.createChannel(false)) {String msgType bus_error;// Declare an exchangeString exchangeName registerExchangeName;channel.exchangeDeclare(exchangeName, BuiltinExchangeType.DIRECT, true);// Generate a unique queue nameString queueName msg_ msgType;channel.queueDeclare(queueName, true, false, false, null);// Define the routing keychannel.queueBind(queueName, exchangeName, msgType);// Send a message to the exchangeString message Hello, RabbitMQ!;channel.basicPublish(exchangeName, msgType, null, message.getBytes());} catch (IOException | TimeoutException e) {e.printStackTrace();}}至于监听队列消费就没啥好写的了百度一大堆。
参考文档列表
RabbitMQ 5中消息模型介绍
RabbitMQ动态创建消息队列
RabbitMQ官方说明文档java指南