Rabbitmq五种工作模式(三)
目录
一.发布订阅(群发)
1发布订阅结构
1.生产者:
发送消息到交换机
2.交换机:
绑定了多个队列,没有消息的具体路由key(都是""),将会将消息发送给后端绑定的所有队列接收
3.生产端:
绑定到队列形成消息的消费,或者争抢;
4.场景:
软件广告.群发,邮件
2代码实现
1.生产者
public class FanoutSend {
public static void main(String[] args) throws Exception{
//拿到连接对象
//创建一个连接从长
ConnectionFactory factory=new ConnectionFactory();
//需要将连接属性信息,交给连接工厂使用,ip,port,user,password,virturHost
factory.setHost("10.42.60.249");
factory.setPort(5672);
factory.setUsername("guest");
factory.setPassword("guest");
factory.setVirtualHost("/");
//从连接工厂获取长连接.
Connection conn = factory.newConnection();
//从长连接中获取信道对象
Channel channel=conn.createChannel();
//自定义交换机的声明;有了就直接用,没有就创建一个
//三种类型,使用字符串定义 fanout,direct,topic
channel.exchangeDeclare("fanout01","fanout");
//有就会直接使用,没有就会创建一个一,非
//发送消息给fanout01
channel.basicPublish("fanout01", "", null, "hello fanout".getBytes());
}
}
2.消费者 多个
public class FanoutRec01 {
private static final String EX="fanout01";
private static final String queue="fanoutQueue01";
public static void main(String[] args) throws Exception, TimeoutException {
ConnectionFactory factory=new ConnectionFactory();
//需要将连接属性信息,交给连接工厂使用,ip,port,user,password,virturHost
factory.setHost("10.42.60.249");
factory.setPort(5672);
factory.setUsername("guest");
factory.setPassword("guest");
factory.setVirtualHost("/");
//从连接工厂获取长连接.
Connection conn = factory.newConnection();
//从长连接中获取信道对象
Channel channel=conn.createChannel();
//声明队列,默认绑定AMQP default
channel.queueDeclare(queue, false, false, false, null);
//绑定队列到交换机
channel.queueBind(queue, EX, "");
//生成消费对象,绑定消费对象到队列
QueueingConsumer cons=new QueueingConsumer(channel);
channel.basicConsume(queue, cons);
//消费监听消息
while(true){
Delivery deli=cons.nextDelivery();
System.out.println("consumer01接收消息:"+new String(deli.getBody()));
}
}
}