在安裝好RabbitMQ後,我們就來看一看基礎的RabbitMQ的使用,首先我們先來看一看比較常用的Direct模式,其使用也是非常簡單的,首先我們需要引入相關的依賴,如下:
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.0.0</version>
</dependency>
注意: 5系列的版本最好使用JDK8及以上,低於JDK8建議使用4.x版本
然後我們先來看一看RabbitMQ的消息生產者,這裏我們可以結合之前介紹的AMQP及RabbitMQ概論中的流程來看,這樣會更加容易理解
public class DirectProducer {
//交換器名稱
public static final String EXCHANGE_NAME = "logs";
public static void main(String[] args) throws Exception {
//創建連接,連接到RabbitMQ
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("127.0.0.1");
Connection connection = connectionFactory.newConnection();
//創建信道
Channel channel = connection.createChannel();
//創建交換器
channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
//定義的業務日誌消息級別,即作爲路由鍵使用
String[] logLevels = {"error", "warn", "info"};
for (int i = 0; i < logLevels.length; i++) {
String logLevel = logLevels[i];
String msg = "Hello RabbitMQ";
//發佈消息,需要參數:交換器、路由鍵,其中以日誌消息級別爲路由鍵
channel.basicPublish(EXCHANGE_NAME, logLevel, null, msg.getBytes(Charset.forName("UTF-8")));
}
channel.close();
connection.close();
}
}
消息發送出去後,我們還需要建立消費者去消費消息,上述生成者一共生成了error、warn、info三組消息,這裏我們就來看看只消費error的消費者,如下:
public class ErrorConsumer {
public static final String EXCHANGE_NAME = "logs";
public static void main(String[] args) throws Exception {
//創建連接,連接到RabbitMQ,與發送端一樣
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("127.0.0.1");
Connection connection = connectionFactory.newConnection();
//創建信道
Channel channel = connection.createChannel();
//可不創建,由生產者進行創建
channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
String queueName = "logError"; //聲明一個隊列名稱
String routingKey = "error"; //路由鍵名稱
//創建一個隊列
channel.queueDeclare(queueName, false, false, false, null);
//將隊列和交換器通過路由鍵進行綁定
channel.queueBind(queueName, EXCHANGE_NAME, routingKey);
//聲明瞭一個消費者
Consumer consumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("Exchange: " + envelope.getExchange());
System.out.println("RoutingKey: " + envelope.getRoutingKey());
System.out.println("Content: " + new String(body, Charset.defaultCharset()));
System.out.println("--------------");
}
};
//消費者正式開始在指定隊列上消費消息
channel.basicConsume(queueName, true, consumer);
}
}
然後我們就可以進行測試了,測試結果如下:
上述消費者只是消費了error的消息,即上述隊列只綁定了一個路由鍵。萬一我們想要消費多種消息,即隊列上需要綁定多個路由鍵,那麼應該如何進行設置呢,如下;
其實非常的簡單,我們需要做一點點很多的變化,就是在綁定路由鍵的時候,多次綁定就可以了,如下: