紀(jì)檢監(jiān)察信訪舉報(bào)網(wǎng)站建設(shè)/如何創(chuàng)建一個(gè)網(wǎng)頁
接上一篇《RabbitMQ-安裝篇(阿里云主機(jī))-CSDN博客》
安裝好RabbitMQ后,我們將開始RabbitMQ的使用,根據(jù)官網(wǎng)文檔RabbitMQ Tutorials | RabbitMQ,我們一步一步的學(xué)習(xí)。
1. "Hello World!"
這里先說明幾個(gè)概念:
生產(chǎn)者:指消息的發(fā)送方,用圖例表示。
消費(fèi)者:指消息的接收放,用圖例表示。
隊(duì)列(queue):生產(chǎn)者發(fā)送的消息將被傳遞到隊(duì)列里,消費(fèi)這從隊(duì)列中消費(fèi)消息
下面以 生產(chǎn)者 發(fā)送消息到隊(duì)列,消費(fèi)者從隊(duì)列里消費(fèi)消息為例,演示如何調(diào)用(Java代碼)。
RabbitMQ支持多種協(xié)議。本教程使用AMQP0-9-1,它是一個(gè)開放的、通用的消息傳遞協(xié)議。
1.1 下載依賴項(xiàng)
下載客戶端庫客戶端連接庫及其依賴項(xiàng)(SLF4J API和SLF4J Simple)。將這些文件復(fù)制到您的工作目錄中,連同教程Java文件。
1.2 生產(chǎn)者代碼-Send.java
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.nio.charset.StandardCharsets;//生產(chǎn)者
public class Send {public static void main(String[] argv) throws Exception {// 創(chuàng)建連接ConnectionFactory factory = new ConnectionFactory();factory.setHost("【服務(wù)器地址】");factory.setPort(【端口:默認(rèn)5672】);factory.setUsername("【賬號】");factory.setPassword("【密碼】");factory.setVirtualHost("【虛擬主機(jī)】");// 創(chuàng)建信道,發(fā)送消息String queueName = "rc.queue";try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {channel.queueDeclare(queueName, true, false, false, null);String message = "Hello World!";channel.basicPublish("", queueName, null, message.getBytes(StandardCharsets.UTF_8));System.out.println(" [x] Sent '" + message + "'");}}
}
請將代碼中相關(guān)配置項(xiàng)設(shè)置為您自己的配置。
運(yùn)行代碼,即可向RabbitMQ中的rc.queue隊(duì)列發(fā)送一條Hello World消息。(rc.queue為我自己創(chuàng)建的,請根據(jù)實(shí)際情況調(diào)整)
在RabbitMQ后臺可以查看到該隊(duì)列里的消息。
1.3 消費(fèi)者代碼-Recv.java
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
import java.nio.charset.StandardCharsets;//消費(fèi)者
public class Recv {public static void main(String[] argv) throws Exception {// 創(chuàng)建連接ConnectionFactory factory = new ConnectionFactory();factory.setHost("【服務(wù)器地址】");factory.setPort(【端口:默認(rèn)5672】);factory.setUsername("【賬號】");factory.setPassword("【密碼】");factory.setVirtualHost("【虛擬主機(jī)】");// 創(chuàng)建連接通道Connection connection = factory.newConnection();Channel channel = connection.createChannel();String queueName = "rc.queue";channel.queueDeclare(queueName, true, false, false, null);System.out.println(" [*] Waiting for messages. To exit press CTRL+C");DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), StandardCharsets.UTF_8);System.out.println(" [x] Received '" + message + "'");};channel.basicConsume(queueName, true, deliverCallback, consumerTag -> {});}
}
運(yùn)行結(jié)果
2.其他模式
調(diào)通了1種模式,其他模式類似的方式調(diào)試即可。RabbitMQ Tutorials | RabbitMQ
3.在Springboot中使用RabbitMQ??
3.1?添加依賴
在pom.xml
中添加Spring Boot的RabbitMQ依賴。
<!--RabbitMQ-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
?3.2 配置RabbitMQ
在application.properties
或application.yml
中配置RabbitMQ連接信息。
# application.properties
spring.rabbitmq.host=【服務(wù)器地址】
spring.rabbitmq.port=【端口:默認(rèn)5672】
spring.rabbitmq.username=【用戶名】
spring.rabbitmq.password=【密碼】
spring:rabbitmq:host: 【服務(wù)器地址】port: 【端口:默認(rèn)5672】username: 【用戶名】password: 【密碼】
?配置Queue、Exchange和Binding:
通過Java配置類定義消息隊(duì)列、交換器和它們之間的綁定關(guān)系。
(如果在RabbitMQ控制臺設(shè)置好了Queue、Exchange和Binding,無需下面的配置)
@Configuration
public class RabbitMQConfig {@BeanQueue myQueue() {return new Queue("your-queue-name", true);}@BeanDirectExchange myExchange() {return new DirectExchange("your-exchange");}@BeanBinding binding(Queue myQueue, DirectExchange myExchange) {return BindingBuilder.bind(myQueue).to(myExchange).with("your-routingKey");}
}
3.3 創(chuàng)建消息生產(chǎn)者
定義一個(gè)簡單的消息生產(chǎn)者類,使用@RabbitTemplate
注解來發(fā)送消息到隊(duì)列:
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class MessageProducer {private final RabbitTemplate rabbitTemplate;@Autowiredpublic MessageProducer(RabbitTemplate rabbitTemplate) {this.rabbitTemplate = rabbitTemplate;}public void sendMessage(String message) {rabbitTemplate.convertAndSend("your-queue-name", message);}
}
3.4.創(chuàng)建消息消費(fèi)者
定義一個(gè)消息消費(fèi)者類,使用@RabbitListener
注解來監(jiān)聽特定的隊(duì)列:
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class MessageConsumer {@RabbitListener(queues = "your-queue-name")public void receiveMessage(String message) {System.out.println("Received message: " + message);}
}
3.5.啟動(dòng)和測試
確保你的應(yīng)用啟動(dòng)類上有@EnableRabbit
注解啟用RabbitMQ。確保你的RabbitMQ服務(wù)正在運(yùn)行,并嘗試從你的應(yīng)用中發(fā)送和接收消息。你可以通過調(diào)用MessageProducer
中的sendMessage
方法來測試發(fā)送功能,而接收功能應(yīng)該自動(dòng)觸發(fā)MessageConsumer
中的receiveMessage
方法。