山一程--EAI--AMQP--RabbitMQ ( Step 2 )
目的:深入研习消息系统集成 AMQP 协议实现 RabbitMQ
实现路线:
1.基于 <RabbitMQ in action> , <深入理解RabbitMQ>
2.<Spring xx> 系列书籍中与此主题相关,用以实践
2023-01-24
1.Rabbit web 控制台 -》 admin -》 Virtual Hosts 创建

2.Spring boot 依赖 application.yml 配置
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-integration</artifactId> </dependency> <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>

server 端
@Configuration public class WeatherAMQPConfig {
@Bean public Jackson2JsonMessageConverter jsonMessageConverter() { return new Jackson2JsonMessageConverter(); } @RabbitListener(bindings = @QueueBinding( exchange = @Exchange(name = "integration.practice.exchanger", type = ExchangeTypes.DIRECT), value = @Queue(name = "integration.practice.replyQueue"), key = "integration.practice.reply_rk")) public void confirmReceive(Weather weather) { System.out.println(weather.toString()); } }
@SpringBootApplication public class IntegrationRabbitmqWork1Application { public static void main(String[] args) { SpringApplication.run(IntegrationRabbitmqWork1Application.class, args); } @Component class runCls implements ApplicationRunner{ @Autowired RabbitTemplate rabbitTemplate; @Override public void run(ApplicationArguments args) throws Exception { AnalysisInfo analysisInfo = new AnalysisInfo(1,2,"param3"); rabbitTemplate.convertAndSend("integration.practice.exchanger", "integration.practice.send_rk", analysisInfo); } } }
客户端
@Configuration public class ForecastMQProxy { @Bean public Jackson2JsonMessageConverter jsonMessageConverter(){ return new Jackson2JsonMessageConverter(); } @RabbitListener(bindings= @QueueBinding( exchange= @Exchange(name="integration.practice.exchanger",type= ExchangeTypes.DIRECT), value=@Queue(name="integration.practice.sendQueue"), key="integration.practice.send_rk") ) @SendTo("integration.practice.exchanger/integration.practice.reply_rk") public Weather analysisAndReply(AnalysisInfo analysisInfo){ Weather result = new Forecast().forecastFrom(analysisInfo); return result; } }
注意 Spring boot 从 MQ 中转换对象,要有无参构造函数.

浙公网安备 33010602011771号