キューワーク
ワークキューは、より多くの消費者側よりも、エントリー手順でキュー内のメッセージを2人の一般的な消費者の最終消費者を比較しました。シナリオ:多くの場合、または複数のタスクのためにあまりにも重い、作業キューの使用は、処理タスクの速度を向上させることができます。
テスト:1、はじめに、複数の消費者を起動します。図2に示すように、生産者の複数のメッセージを送信します。
結果:1、受信したメッセージのみ消費者になり、2、ウサギ方法ポーリングメッセージは平均的な消費者に送信され、図3に示すように、メッセージを処理した後、消費者は、次を受信しますメッセージ
/ subsrcibeパブリッシュ
サブスクライブパブリッシュモデル:
1は、すべての消費者は、独自のキューを監視します。
図2に示すように、各キューにプロデューサブローカ、スイッチは転送メッセージバインドこのスイッチへのメッセージは、各バインディングスイッチは、メッセージキューを受信します
これは、結合した消費者にそれぞれ、2つのキューを産生する、スイッチを有するのと等価です
package com.xuecheng.test.rabbitmq;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* @Classname Producer02_publish
* @Description TODO
* @Date 2020/2/21 15:53
* @Created by mmz
*/
public class Producer02_publish {
private static final String QUEUE_INFORM_EMAIL = "queue_inform_email";
private static final String QUEUE_INFORM_SMS = "queue_inform_sms";
private static final String EXCHANGE_FANOUT_INFORM="exchange_fanout_inform";
public static void main(String[] args) {
//通过连接工厂,创建新的连接
ConnectionFactory connectionFactory = new ConnectionFactory();
//设置参数
connectionFactory.setHost("127.0.0.1");//ip地址
connectionFactory.setPort(5672);//端口
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
//设置虚拟机,一个mqf服务可以设置多个虚拟机,每个虚拟机就相当于独立的mq
connectionFactory.setVirtualHost("/");
//生产者和mq建立连接
Connection connection = null;
Channel channel = null ;
try {
connection = connectionFactory.newConnection();
//创建会话通道,所有生产者和mq服务都在channel通道中
channel = connection.createChannel();
//声明队列
//参数
channel.queueDeclare(QUEUE_INFORM_EMAIL,true,false,false,null);
channel.queueDeclare(QUEUE_INFORM_SMS,true,false,false,null);
//声明交换机
//交换机的类型:
// fanout:对应的rabbitmq的工作模式是publish/subscribe
// direct: 路由的工作模式
// topic: 通配符模式
// headers: 对应headers工作模式
channel.exchangeDeclare(EXCHANGE_FANOUT_INFORM, BuiltinExchangeType.FANOUT);
//交换机和队列进行绑定
//有一个参数routingkey,在发布订阅模式是一个空穿
channel.queueBind(QUEUE_INFORM_EMAIL,EXCHANGE_FANOUT_INFORM,"");
channel.queueBind(QUEUE_INFORM_SMS,EXCHANGE_FANOUT_INFORM,"");
//发送消息
for(int i=0;i<5;i++){
String message = "helloworld mmz";
channel.basicPublish(EXCHANGE_FANOUT_INFORM,"",null,message.getBytes());
System.out.println("send to mq" + message);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭连接
//先关闭通道
try {
channel.close();
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
ルーティング
ルーティングモード:
1は、すべての消費者は自分のキュー、およびセットroutingkeyを監視します。
図2は、スイッチによってスイッチメーカーへのメッセージは、指定されたキュー記載routingkeyにメッセージを転送します。
トピックス動作モード
RPCとヘッダーモード