Tech&WK_Architecture_EIP_Message_RabbitMQ_SpringBoot
target : implement enterprise integration pattern
1. MQ Bus rabbitmq spring boot config
<dependency> <groupId>io.arivera.oss</groupId> <artifactId>embedded-rabbitmq</artifactId> <version>1.4.0</version> </dependency>
在demo 构建中体现的问题:
1. 启用重试功能

2. 启用@EnableScheduling 注解

section: 使用 RabbitMQ 在 Spring boot 实现 AMQP
application.property 注意配置

1 # MQ RabbitMQ 2 spring.rabbitmq.host=127.0.0.1 3 spring.rabbitmq.port=5672 4 spring.rabbitmq.username=guest 5 spring.rabbitmq.password=guest 6 7 #客户机应连接到的地址列表,多个地址之间以逗号分隔 8 #spring.rabbitmq.addresses= 9 # 连接超时实践,默认为空,0表示从不超时 10 #spring.rabbitmq.connection-timeout= 11 #连接到代理时使用的虚拟主机 12 #spring.rabbitmq.virtual-host= 13 14 #用来发送操作的默认交换机的名称,默认空 15 #spring.rabbitmq.template.exchange= 16 #用来发送操作的默认路由键的键值,默认为空 17 #spring.rabbitmq.template.routing-key= 18 #接受操作的超时时间,默认为0,表示永不超时 19 #spring.rabbitmq.template.receive-timeout= 20 #发送-接收操作的超时时间,默认为5秒钟 21 #spring.rabbitmq.template.reply-timeout= 22 23 #template实例的重试逻辑,默认禁用。 24 spring.rabbitmq.template.retry.enabled=true 25 #尝试发送消息的次数,默认为3次 26 #spring.rabbitmq.template.retry.max-attempts= 27 #第一次和第二次尝试发送消息之间的间隔,默认时1秒 28 #spring.rabbitmq.template.retry.initial-interval= 29 #再次尝试发送消息的最大时间间隔,默认时10秒 30 #spring.rabbitmq.template.retry.max-interval= 31 #应用于前一个间隔的程数,默认为1.0 32 #spring.rabbitmq.template.retry.multiplier= 33 34 #侦听器容器的类型,direct 和 simple, 默认是 simple 35 #spring.rabbitmq.listener.type=direct 36 #容器默认模式,默认为空 37 #spring.rabbitmq.listener.simple.acknowledge-mode= 38 #单个请求中处理的消息数量,默认为空 39 #spring.rabbitmq.listener.simple.prefetch= 40 #是否将被拒绝的消息重新放入队列中 41 #spring.rabbitmq.listener.simple.default-requeue-rejected= 42 #侦听器触发器线程的最小数量 43 #spring.rabbitmq.listener.simple.concurrency= 44 #侦听器触发器线程的最大数量 45 #spring.rabbitmq.listener.simple.max-concurrency= 46 #单个事务中处理的消息数量,为了获得最佳结果,该属性值应小于等于prefetch值 47 #spring.rabbitmq.listener.simple.transaction-size= 48 # 容器确认模式,默认为空 49 #spring.rabbitmq.listener.direct.acknowledge-mode= 50 #单个请求中可以处理的消息数量,默认为空 51 #spring.rabbitmq.listener.direct.prefetch= 52 #是否将被拒绝的消息重新放入队列中 53 #spring.rabbitmq.listener.direct.default-requeue-rejected= 54 #每个队列的消费者数量,默认值为1 55 #spring.rabbitmq.listener.direct.consumers-per-queue=
基础: 如有 Scheduled 则要在 Configuration 时启用 @EnableSchduling



Spring boot rabbit MQ 重要配置
1. application.properties 配置 host user pwd , 重试策略等
2.使用 Json 数据格式传输 ,配置转换器

3. Sender 的 配置, Springboot 自动注入 RabbitMQ , 结合 Step2 调用 convertAndSend( exchanger, routingKey, object)

4. Receiver
如同 Sender, 配置 Converter ,Jackson2JsonMessageConveter
@RabbitListener 在 @Bean 上,将用作传入消息的消息侦听器,Spring boot 会构造一个消息侦听器容器,注解的方法将接收传入的消息.

5 发送者接收确认消息.

section : 使用 JMS 在 Spring boot 中
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> </dependency> <dependency> <groupId>javax.jms</groupId> <artifactId>javax.jms-api</artifactId> <scope>provided</scope> </dependency>
配置 Convert

Jms 相关 test

2020-11-29
RabbitMQ basic.propertities Message_id, Cor-relation-id 消息流 的唯一性及可 业务流, 可跟踪性
原始

Spring boot rabbimtMQ 增加 CorrelationData


2020-12-01
blocking receive return result

2020-12-24
Spring boot, RabbitMQ 将 JSON格式的数据传递.


2020-12-28


2020-12-28
Spring boot Rabbit Jackson2 Converter
1 public class RabbitListenerConfig implements RabbitListenerConfigurer { 2 3 @Override 4 public void configureRabbitListeners(RabbitListenerEndpointRegistrar rabbitListenerEndpointRegistrar) { 5 rabbitListenerEndpointRegistrar.setMessageHandlerMethodFactory(messageHandlerMethodFactory()); 6 } 7 8 @Bean 9 MessageHandlerMethodFactory messageHandlerMethodFactory(){ 10 DefaultMessageHandlerMethodFactory messageHandlerMethodFactory = 11 new DefaultMessageHandlerMethodFactory(); 12 messageHandlerMethodFactory.setMessageConverter(mappingJackson2MessageConverter()); 13 return messageHandlerMethodFactory; 14 } 15 16 @Bean 17 MappingJackson2MessageConverter mappingJackson2MessageConverter(){ 18 return new MappingJackson2MessageConverter(); 19 } 20 }
1 public class RabbitmqConfig { 2 3 @Bean 4 @Scope("prototype") 5 public RabbitTemplate rabbitTemplate(final ConnectionFactory connectionFactory){ 6 final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); 7 rabbitTemplate.setMessageConverter(jackson2MessageConverter()); 8 return rabbitTemplate; 9 } 10 }
platform-foreground 创建 Exchange 时,之前是 Direct 类型,改为 Topic 时, 报错提示rabbit 无法改变.
创建新的 Topic exchange 也受影响无法创建相应Queue,暂未解决.
进入Rabbit ctl 进行管理操作:

2020-12-30
Listener 接收到协作方传回的消息. 继续工作流.
Spring boot , RabbitMQ 配置
RabbitMQ 配置 virtual-host :
1. admin 添加 虚拟机
2. 添加用户
3. 虚拟机分配用户
4.spring config




浙公网安备 33010602011771号