springboot整合rabbitMQ

1. 创建两个maven项目,这是为了模拟分布式应用系统中,两个应用之间互相交流的过程,一个发送者(Sender),一个接收者(Receiver)
2. 两个项目的pom中添加rabbitmq的依赖
        <!-- 添加springboot对amqp的支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
3.在application.properties配置mq的参数
spring.application.name=springboot-rabbitmq
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=scan
spring.rabbitmq.password=scan
spring.rabbitmq.virtual-host=/ws

用户名,密码,host在管理界面可以配置http://localhost:15672/#/vhosts
在这里插入图片描述

4.在生产者中往队列发送消息
@Configuration
public class RabbitMqConfig {
    //以下配置RabbitMQ消息服务
    @Autowired
    public ConnectionFactory connectionFactory;
    @Bean
    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setMessageConverter(jsonMessageConverter());
        //factory.setConcurrentConsumers(3);
        //factory.setMaxConcurrentConsumers(10);
        return factory;
    }
    
    @Bean
    public MessageConverter jsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }
 
    @Bean
    public RabbitTemplate rabbitTemplate() {
        RabbitTemplate template = new RabbitTemplate(connectionFactory);
        template.setMessageConverter(jsonMessageConverter());
        return template;

    }

    @Bean
    FanoutExchange exchange() {
        return new FanoutExchange("exchange");
    }
}

@RunWith(SpringRunner.class)
@SpringBootTest
public class WsScanApplicationTests {
	@Autowired
	private RabbitTemplate amqpTemplate;
	@Test
	public void contextLoads() {
			ScanData a = new ScanData();
			a.setAPI_ID("API_ID1111111111");
			a.setAPI_VER("API_VER11111");
			a.setBAG_ID("BAG111111");
			a.setBCH_ID("BRC_ID11111");
		amqpTemplate.convertAndSend("exchange","routingKey",a);
	}
}
4.在消费者中自动创建队列接收广播交换机的信息

默认自动ack

@Configuration
public class RabbitMqConfig {
    @Autowired
    public ConnectionFactory connectionFactory;
    /** * 消费者数量,默认10 */
    public static final int DEFAULT_CONCURRENT = 4;
    /** * 每个消费者获取最大投递数量 默认50 */
    public static final int DEFAULT_PREFETCH_COUNT = 50;

    @Bean
    public Queue queueMessage() {
        return new Queue("ws_scan_data");
    }

    @Bean
    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setMessageConverter(jsonMessageConverter());
        //手动编写线程并发消费,避免数据库读写异常
        /*factory.setConcurrentConsumers(DEFAULT_CONCURRENT);
        factory.setMaxConcurrentConsumers(DEFAULT_PREFETCH_COUNT);*/
        return factory;
    }
    @Bean
    public MessageConverter jsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }

    @Bean
    public RabbitTemplate rabbitTemplate() {
        RabbitTemplate template = new RabbitTemplate(connectionFactory);
        template.setMessageConverter(jsonMessageConverter());
        return template;

    }
}

@Component
public class WcForWsReceiver {
    //线程任务分发
   @Autowired
   private ExecuteManager manager;
   private static Logger log = LoggerFactory.getLogger(WcForWsReceiver.class);
    
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "ws_scan_data",durable = "true"),
            exchange = @Exchange(value = "exchange",durable = "true",type = "fanout"),
            key = "routingKey"
    ))
    @RabbitHandler
    public void process(@Payload ScanData data) {
      try {
            manager.sendMsg(data);
        } catch (Exception e) {
            log.error(e.getMessage());
        }
    }

}
5.Exchange 模式

https://www.cnblogs.com/zhangweizhong/p/5713874.html

Spring Boot框架可以很容易地与RabbitMQ进行集成。为了实现这个目标,你需要在项目的依赖项中添两个关键的依赖项。首先,你需要添spring-boot-starter-amqp依赖项,它提供了与RabbitMQ进行通信的必要类和方法。其次,你还需要添spring-boot-starter-web依赖项,以便在项目中使用Web功能。 在你的项目创建两个Spring Boot应用程序,一个是RabbitMQ的生产者,另一个是消费者。通过这两个应用程序,你可以实现消息的发送和接收。生产者应用程序负责将消息发送到RabbitMQ的消息队列,而消费者应用程序则负责从队列中接收并处理消息。这样,你就可以实现基于RabbitMQ的消息传递系统。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot整合RabbitMQ](https://blog.csdn.net/K_kzj_K/article/details/106642250)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Springboot 整合RabbitMq ,用心看完这一篇就够了](https://blog.csdn.net/qq_35387940/article/details/100514134)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [undefined](undefined)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

占星安啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值