RabbitMQ与 spring 整合

本文介绍了如何将RabbitMQ与Spring整合,重点讲解了RabbitAdmin、RabbitTemplate、SimpleMessageListenerContainer、MessageListenerAdapter和MessageConverter的使用方法。通过代码示例展示了如何在SpringBoot项目中创建交换机、队列、绑定关系,以及发送和接收消息。同时,还探讨了如何自定义适配器和转换器来处理不同类型的消息。

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

rabbitmq 与 spring 整合,熟悉 RabbitAdmin、 RabbitTemplate、SimpleMessageListenerContainer、MessageListenerAdapter 和 MessageConverter 几个类(接口)的用法。

代码示例会使用 springboot 项目进行演示

pom 依赖如下:

		<dependency>
		    <groupId>com.rabbitmq</groupId>
		    <artifactId>amqp-client</artifactId>
		    <version>5.7.1</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-amqp</artifactId>
		</dependency>
		
		<!-- json 转换 -->
		<dependency>
		    <groupId>com.fasterxml.jackson.core</groupId>
		    <artifactId>jackson-databind</artifactId>
		</dependency>

RabbitAdmin

RabbitAdmin 可以用来创建交换机、队列、绑定关系等。当然,这些交换机、队列、绑定关系也可以通过配置文件使用容器进行创建。

首先创建一个主配置类,把 RabbitAdmin 注入容器中,然后就可以直接使用 RabbitAdmin 中的方法了

@Configuration
@ComponentScan({
   "com.xiao.*"})
public class RabbitmqConfig {
   

	@Bean
	public ConnectionFactory connectionFactory() {
   
		CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
		cachingConnectionFactory.setAddresses("192.168.0.125:5672");
		cachingConnectionFactory.setUsername("guest");
		cachingConnectionFactory.setPassword("guest");
		cachingConnectionFactory.setVirtualHost("/");
		return cachingConnectionFactory;
	}
	
	@Bean
	public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
    
		// 该方法的参数必须与上一个bean的方法名相同,否则在容器中无法找到该对象
		RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
		// 必须设置为 true,否则容器不会加载 RabbitAdmin 类
		rabbitAdmin.setAutoStartup(true);
		return rabbitAdmin;
	}
}

在测试类中使用 RabbitAdmin 的功能

@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitmqTest {
   

	@Autowired
	RabbitAdmin rabbitAdmin;
	
	@Test
	public void testRabbitAdmin() {
   
		// 第一种绑定方式 
		rabbitAdmin.declareExchange(new TopicExchange("admin.topic.exchange", false, false));
		
		rabbitAdmin.declareQueue(new Queue("admin.queue", false, false, false));
		
		//rabbitAdmin.declareBinding(new Binding(destination, destinationType, exchange, routingKey, arguments));
		rabbitAdmin.declareBinding(new Binding("admin.queue", Binding.DestinationType.QUEUE, "admin.topic.exchange", "test.#", null));
		
/*		
		// 第二种绑定方式 
		rabbitAdmin.declareBinding(BindingBuilder
				.bind(new Queue("admin.queue",false,false,false))
				.to(new TopicExchange("admin.topic.exchange", false, false))
				.with("builder.#"));
*/		
		// 清空队列中的消息数据
		//rabbitAdmin.purgeQueue(queueName, noWait);
		//rabbitAdmin.purgeQueue("admin.queue", false);
	}
}

我运行了几次,发现第一种方法可以直接创建交换机和队列,并建立绑定关系,但是第二种方法只能使用已经存在的交换机和队列,如果写不存在的交换机和队列名会报错。

在配置类中通过容器创建交换机、队列和绑定关系,只要在配置类中使用 @Bean 注解即可

	@Bean
	public TopicExchange exchange1() {
   
		return new TopicExchange("topicExchange001", false, false);
	}
	
	@Bean
	public Queue queue1() {
   
		return new Queue("queue001", false);
	}
	
	@Bean
	public Binding binding1() {
   
		return BindingBuilder.bind(queue1()).to(exchange1()).with("bean.#");
	}

执行上面的测试方法即可看到 topicExchange001 和 queue001 及绑定关系已经创建了

RabbitTemplate

  • RabbitTemplate 与 springAMQP 整合是发送消息的关键类,可以设置消息的属性 MessageProperties
  • 该类提供了丰富的发送消息方法,需注入到 spring 容器进行使用

首先需要在配置类中注入 RabbitTemplate 实例,同 RabbitAdmin

	@Bean
	public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
   
		RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
		return rabbitTemplate;
	}

测试用例

	@Autowired
	RabbitTemplate rabbitTemplate;
	
	@Test
	public void testRabbitTemplage() {
   
		MessageProperties messageProperties = new MessageProperties();
		messageProperties.getHeaders().put("hid", "head id");
		messageProperties.getHeaders().put("hfun", "head 功能说明");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值