SpringBoot集成RabbitMq(Topic模式)

本文总结了SpringBoot集成RabbitMq的Topic模式应用,包括maven依赖引入、MQ配置、代码使用及多MQ源配置。通过示例展示了生产者和消费者的实现,并指出直接和广播模式配置更为简单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天主要介绍一下,前些天对SpringBoot集成RabbitMq一些工作的总结:

1、maven包引入:

 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>

2、MQ配置文件配置:
springBoot配置文件方式有两种,一种是yml,一种是properties,以yml为例:

spring:
	rabbitmq:
			host: 127.0.0.1
			port: 5672
			username: root
			password: root

这里说一下,如果连接的本地默认配置的rabbitMq,这些属性配置也是可以省略的。

3、RabbitMq代码使用方式:

//1、配置队列Queue
@Bean(name = "messages")
public Queue queueMessage() {
    return new Queue("demo.user.update");
}

//2、配置交换机Exchange
@Bean(name = "exchange" )
public TopicExchange exchange() {
    return new TopicExchange("exchange");
}

//3、将队列按照相应的规则绑定到交换机上
@Bean
Binding bindingExchangeMessages(@Qualifier("message") Queue queueMessages,
                                T@Qualifier("exchange")opicExchange exchange) {
    return BindingBuilder.bind(queueMessages).to(exchange).with("demo.user.*");
}

4、生产和消费消息:

生产者:

//注入template
@Autowired
private AmqpTemplate template;
//发送消息
public void Sender(){
    template.convertAndSend("exchange","tdemo.user.update","user updated ");
}

消费者:

// 监听器监听指定的queue,这里也可以指定多个队列
@RabbitListener(queues="messages") 
public void process2(String message){
    System.out.println("received messages is :  "+message);
}

如果是单个MQ源到此就可以结束了!

但是很多业务场景下可能监听不同的MQ服务,而每个MQ服务是不同的业务线自己搭建的服务,需要配置多个MQ源。

多个MQ源需要生命ConnectionFactory 和 RabbitTemplate

//声明ConnectionFactory
@Bean(name = "firstConnectionFactory")
@Primary
public ConnectionFactory firstSyncConnectionFactory(
        @Value("${spring.rabbitmq.first.host}") String host,
        @Value("${spring.rabbitmq.first.port}") int port,
        @Value("${spring.rabbitmq.first.username}") String username,
        @Value("${spring.rabbitmq.first.password}") String password,
        @Value("${spring.rabbitmq.first.virtual-host}") String virtualHost) {
    CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
    connectionFactory.setHost(host);
    connectionFactory.setPort(port);
    connectionFactory.setUsername(username);
    connectionFactory.setPassword(password);
    connectionFactory.setVirtualHost(virtualHost);
    return connectionFactory;
}
//声明RabbitTemplate
@Bean(name = "firstRabbitTemplate")
@Primary
public RabbitTemplate firstRabbitTemplate(
        @Qualifier("phpConnectionFactory") ConnectionFactory connectionFactory) {
    RabbitTemplate hospSyncRabbitTemplate = new RabbitTemplate(connectionFactory);
    return hospSyncRabbitTemplate;
}
//消费端监听Linstener
@Bean(name = "firstListenerContainerFactory")
public SimpleRabbitListenerContainerFactory firstSyncFactory(
        SimpleRabbitListenerContainerFactoryConfigurer configurer,
        @Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory
) {
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    configurer.configure(factory, connectionFactory);
    return factory;
}

生产者:

//注入template
@Autowired
private AmqpTemplate firstRabbitTemplate;
//发送消息
public void Sender(){
    firstRabbitTemplate.convertAndSend("exchange","tdemo.user.update","user updated ");
}

消费者:

// 监听器监听指定的queue,这里也可以指定多个队列
@RabbitListener(queues = {"messages"},
        containerFactory="firstListenerContainerFactory")
public void processMessage(String message) {
 	System.out.println("received messages is :  "+message);
}

到此SpringBoot集成RabbitMq常用方式介绍结束了。这里只介绍了topic模式,其他的direct、fanout更简单一些,不再介绍!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值