山一程--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 中转换对象,要有无参构造函数.


 

posted @ 2023-01-24 20:18  君子之行  阅读(11)  评论(0)    收藏  举报