官網(wǎng)關(guān)于工作模式的解釋地址:https://www.rabbitmq.com/getstarted.html
Work Queue(工作隊(duì)列)
生產(chǎn)者發(fā)消息,啟動(dòng)多個(gè)消費(fèi)者來消費(fèi)消息,每個(gè)消費(fèi)者僅消費(fèi)部分消息,可達(dá)到負(fù)載均衡的效果。
創(chuàng)建生產(chǎn)者
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.nio.charset.StandardCharsets;
public class Product {
public static void main(String[] args) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setUri("amqp://root:123456@node1:5672/%2f");
//創(chuàng)建連接和隊(duì)列
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
//聲明隊(duì)列,持久化,不自動(dòng)刪除
channel.queueDeclare("qu.wk", true, false, false, null);
//聲明交換機(jī),消息持久化,不自動(dòng)刪除
channel.exchangeDeclare("ex.wk", BuiltinExchangeType.DIRECT, true, false, null);
//隊(duì)列和交換機(jī)綁定
channel.queueBind("qu.wk", "ex.wk", "rk.wq");
for (int i = 0; i < 20; i++) {
//發(fā)送消息
channel.basicPublish("ex.wk",
"rk.wq", null, ("data msg " + i).getBytes(StandardCharsets.UTF_8));
}
channel.close();
connection.close();
}
}
創(chuàng)建消費(fèi)者
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.CancelCallback;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
import com.rabbitmq.client.Delivery;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class Consumer {
public static void main(String[] args) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setUri("amqp://root:123456@node1:5672/%2f");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
//聲明隊(duì)列,持久化,不自動(dòng)刪除
channel.queueDeclare("qu.wk", true, false, false, null);
channel.basicConsume("qu.wk", new DeliverCallback() {
@Override
public void handle(String consumerTag, Delivery message) throws IOException {
System.out.println("收到的消息:" + new String(message.getBody(), StandardCharsets.UTF_8));
}
}, new CancelCallback() {
@Override
public void handle(String consumerTag) throws IOException {
System.out.println("cancel的消息:" + consumerTag);
}
});
}
}
首先運(yùn)行消息費(fèi),為了測試工作隊(duì)列模式,消費(fèi)都需要啟動(dòng)多個(gè),看是否能夠進(jìn)行負(fù)載均衡操作。
在IDEA中啟動(dòng)多個(gè)消費(fèi)者,注意需要溝選啟動(dòng)運(yùn)行參數(shù):
此樣例中啟動(dòng)是4個(gè)。
啟動(dòng)生產(chǎn)者,再觀察消費(fèi)者的輸出信息:
再次觀察消費(fèi)者的輸出便可發(fā)現(xiàn):
可以發(fā)現(xiàn)每個(gè)工作隊(duì)列都收到了5條消息。文章來源:http://www.zghlxwxcb.cn/news/detail-691439.html
此便可看出工作隊(duì)列的一個(gè)重要特性,負(fù)載均衡。文章來源地址http://www.zghlxwxcb.cn/news/detail-691439.html
到了這里,關(guān)于RabbitMQ工作模式-工作隊(duì)列的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!