1.linux上直接拉個mq映象,直接啟動,設定了映象名my-rabbitmq, 設定埠對映出去,設定賬號和密碼為admin
docker run -d --name my-rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:3
2.開啟視覺化介面
先進入容器內部
docker exec -it my-rabbitmq bash
然後啟動介面
rabbitmq-plugins enable rabbitmq_management
訪問:地址:15672 登入即可。
3.springboot中使用
安裝依賴
<!-- rabbitmq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
配置檔案
spring:
rabbitmq:
host: 192.168.17.13 # RabbitMQ伺服器地址
port: 5672 # RabbitMQ伺服器埠
username: admin # 預設使用者名稱
password: admin # 預設密碼
virtual-host: / # 虛擬主機
寫配置類:
@Configuration
public class RabbitMQConfig {
// 定義佇列
@Bean
public Queue queue() {
return new Queue("myQueue", true);
}
//可以定義多個佇列
// 定義第二個佇列
@Bean
public Queue queue2() {
return new Queue("myQueue2", true);
}
// 定義第三個佇列
@Bean
public Queue queue3() {
return new Queue("myQueue3", true);
}
// 定義交換機
@Bean
public TopicExchange exchange() {
return new TopicExchange("myExchange");
}
// 繫結佇列和交換機
@Bean
public Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("myRoutingKey");
}
// 繫結佇列和交換機佇列2的
@Bean
public Binding bindingQueue2(Queue queue2, TopicExchange exchange) {
return BindingBuilder.bind(queue2).to(exchange).with("myRoutingKey2");
}
}
定義佇列
@Bean
public Queue queue() {
return new Queue("myQueue", true);
}
- 第一個引數
"myQueue"
是佇列的名稱,這是一個自定義的識別符號,用於唯一標識這個佇列。 - 第二個引數
true
表示這個佇列是持久化的,即在RabbitMQ伺服器重啟後,佇列依然存在,不會丟失資料。
定義交換機
@Bean
public TopicExchange exchange() {
return new TopicExchange("myExchange");
}
建立一個名為myExchange
的主題交換機(Topic Exchange)例項。
TopicExchange
是一種交換機型別,它使用主題(Topic)進行訊息路由。生產者傳送訊息時,可以指定一個路由鍵,消費者可以根據自己的需求訂閱匹配特定模式的訊息。- 交換機名稱
"myExchange"
是自定義的,用於標識這個交換機。
繫結佇列和交換機
@Bean
public Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("myRoutingKey");
}
這個方法建立了一個繫結例項,它定義瞭如何將佇列繫結到交換機,並指定了路由鍵。
BindingBuilder
是RabbitMQ提供的一個工具類,用於構建繫結關係。bind(queue)
方法指定了要繫結的佇列。to(exchange)
方法指定了要繫結到的交換機。with("myRoutingKey")
方法指定了路由鍵。在這個例子中,所有的路由鍵都是"myRoutingKey"
。這意味著只有當訊息的路由鍵是"myRoutingKey"
時,交換機才會將訊息路由到這個佇列。
配置完了,現在去寫生產者程式碼,也就是發訊息到mq上的程式碼
convertAndSend方法要把剛配置類的交換機和路由鍵填上。
@Component
public class MessageSender {
private final RabbitTemplate rabbitTemplate;
@Autowired
public MessageSender(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
}
public void send(String message) {
rabbitTemplate.convertAndSend("myExchange", "myRoutingKey", message);
}
}
現在寫消費者程式碼,也就是接收到訊息後的處理
指定監控哪個佇列,然後獲取的資訊列印出來,或者做其它處理。
@Component
public class MessageReceiver {
@RabbitListener(queues = "myQueue")
public void receive(String message) {
System.out.println("Received message: " + message);
}
}