一、安装软件
- 安装erlang,地址:https://www.erlang.org/
- 修改环境变量,添加ERLANG_HOME,添加path 【与java一致】
- 安装rabbitMQ,地址:https://www.rabbitmq.com/ 【注意版本支持问题】
- 启动可视化管理界面 rabbitmq-plugins enable rabbitmq_management 【需要在sbin目录下使用或者配置了path】
- 如果遇到系统用户名是中文的情况,参看:https://www.cnblogs.com/bade/p/10303687.html
- rabbitMQ常用命令,参看:https://blog.csdn.net/zxl646801924/article/details/80435231
-
安装并启动成功后访问 localhost:15672,默认用户名和密码是guest
管理界面
二、pom.xml 配置
- 只需要在springboot初始配置下添加如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
三、yml配置 - 生产者和消费者一致
# 可以指定自己设置的虚拟路径和用户
spring:
rabbitmq:
host: localhost
port: 5672
virtual-host: /
username: guest
password: guest
四、生产者(producer)配置
- 声明交换机、队列、路由key及绑定
@Configuration
public class RabbitMQConfig {
// 交换机名称
public static final String EXCHANGE_NAME = "spingboot_topic_exchange";
// 队列名称
public static final String QUEUE_NAME = "topic_queue";
// 声明交换机
@Bean("topicExchange")
public Exchange topicExchange(){
return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
}
// 声明队列
@Bean("topicQueue")
public Queue topicQueue(){
return QueueBuilder.durable(QUEUE_NAME).build();
}
// 绑定
@Bean
public Binding topicBinding(@Qualifier("topicQueue") Queue queue, @Qualifier("topicExchange") Exchange exchange){
// 绑定队列与交换机,并设置路由key = topic.#
return BindingBuilder.bind(queue).to(exchange).with("topic.#").noargs();
}
}
五、消费者(consumer)代码
@Component
public class Mylistener {
// 队列名称与生产者定义的要一致
@RabbitListener(queues = "topic_queue")
public void myListener1(String message) {
System.out.println("消费者接收到消息: " + message);
}
}
六、测试(producer)代码
- 先跑一遍测试,再启动consumer的服务
@SpringBootTest
class ProducerApplicationTests {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
void contextLoads() {
// 将消息按指定路由key发送到交换机
rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME,
"topic.insert", "test msg1");
rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME,
"topic.update", "test msg2");
rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME,
"topic.delete", "test msg3");
}
}
网友评论