我们这个队列主要解决的问题是,生产者生产的东西要消费者同时都得到,所以我们在这之间添加了几个交换机。
先开启消费者
声明交换机,通过交换机获取队列,在进行绑定
package org.example.exchange.ex.recv;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
public class Recv01 {
//定义队列
private final static String EXCHANGE_NAME = "exchange";
public static void main(String[] argv) throws Exception {
//声明连接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置连接工厂的属性
factory.setHost("192.168.26.146");
factory.setUsername("aw");
factory.setPassword("aw");
factory.setPort(5672);
factory.setVirtualHost("/yeb");
//连接工厂 创建连接
Connection connection = factory.newConnection();
//连接通信通道
Channel channel = connection.createChannel();
//声明交换机
channel.exchangeDeclare(EXCHANGE_NAME,"fanout");
//获取队列(给他队列)
String queueName = channel.queueDeclare().getQueue();
//交换机绑定队列
channel.queueBind(queueName,EXCHANGE_NAME,"");
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [x] Received '" + message + "'");
//我们需要在这里手动添加确认设置
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
};
//监听连接 队列名
channel.basicConsume(queueName, false, deliverCallback, consumerTag -> { });
}
}
显示两个连接
连个通信管道
多出一个自己定义的交换机
AD:自动删除
Excl:给他队列
生产者 我们主要是把队列换成交换机
package org.example.exchange.ex.send;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.nio.charset.StandardCharsets;
//简单队列
public class Send {
//j交换机的名称
private final static String EXCHANGE_NAME = "exchange";
public static void main(String[] argv) throws Exception {
//创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置连接工厂的属性
factory.setHost("192.168.26.146");
factory.setUsername("aw");
factory.setPassword("aw");
factory.setPort(5672);
factory.setVirtualHost("/yeb");
//使用这种方式可以进行自动关闭 连接工厂创建连接; 创建通信通道
try ( Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
//添加exchange 类型fanout
channel.exchangeDeclare(EXCHANGE_NAME,"fanout");
//消息
String message = "Hello World!";
//发送消息 参数 交换机、队列名字、参数、消息的实体
channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes(StandardCharsets.UTF_8));
System.out.println(" [x] Sent '" + message + "'");
}
}
}
他们两个都接受到相同的消息