spring boot自动配置了rabbitmq的连接工厂、template等等,使用起来非常方便。
1、导入依赖
创建一个spring boot的maven工程,导入rabbitmq的starter就可以了。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!--测试用-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2、配置rabbitmq的连接
连接已经安装好的rabbitmq
spring.rabbitmq.host=localhost
spring.rabbitmq.password=123456
spring.rabbitmq.port=12356
spring.rabbitmq.username=root
3、配置exchange和queue
import com.wt.rabbitmq.constant.CommonConstant;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @description: mq的交换机以及queue配置
*/
@Configuration
public class RabbitConfig {
//1、创建exchange
@Bean("wtExchange")
public Exchange wtExchange() {
return ExchangeBuilder.directExchange(CommonConstant.EXCHANGE_NAME).build();
}
//2、创建queue
@Bean("wtQueue")
public Queue wtQueue() {
return QueueBuilder.durable(CommonConstant.QUEUE_NAME).build();
}
//3、queue绑定exchange,绑定时设置routing key
@Bean
public Binding bindQueueExchange(@Qualifier("wtExchange") Exchange wtExchange, @Qualifier("wtQueue") Queue wtQueue) {
return BindingBuilder.bind(wtQueue).to(wtExchange).with(CommonConstant.ROUTING_KEY).noargs();
}
}
其中的常量:
package com.wt.rabbitmq.constant;
/**
* @description:
*/
public class CommonConstant {
public static final String EXCHANGE_NAME = "wt_test_exchange_direct";
public static final String QUEUE_NAME = "wt_test_queue_1";
public static final String ROUTING_KEY = "test.routing.key";
}
4、注入template,开始使用
4.1、producer的编写
package com.wt.rabbitmq;
import com.wt.rabbitmq.constant.CommonConstant;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class RabbitmqDemoApplicationTests {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
void testSend() {
//rabbitmq 生产者
rabbitTemplate.convertAndSend(CommonConstant.EXCHANGE_NAME, CommonConstant.ROUTING_KEY, "wt test message");
}
}
4.2、consumer的编写
package com.wt.rabbitmq.consumer;
import com.wt.rabbitmq.constant.CommonConstant;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* @description:
*/
@Component
public class RabbitConsumer {
@RabbitListener(queues = CommonConstant.QUEUE_NAME)
public void Listener(String message) {
System.out.println(message);
}
}