Pub/Sub 订阅模式
1. 模式说明



1.添加好交换机weather
2.发布者
import com.baiqi.rabbitmq.utils.RabbitConstant;import com.baiqi.rabbitmq.utils.RabbitUtils;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import java.util.Scanner;/*** 发布者*/public class WeatherBureau {public static void main(String[] args) throws Exception {Connection connection = RabbitUtils.getConnection();String input = new Scanner(System.in).next();Channel channel = connection.createChannel();//第一个参数交换机名字 其他参数和之前的一样channel.basicPublish(RabbitConstant.EXCHANGE_WEATHER, "", null, input.getBytes());channel.close();connection.close();}}
3.消费者BiaDu
import com.baiqi.rabbitmq.utils.RabbitConstant;import com.baiqi.rabbitmq.utils.RabbitUtils;import com.rabbitmq.client.*;import java.io.IOException;/*** 消费者*/public class BiaDu {public static void main(String[] args) throws IOException {//获取TCP长连接Connection connection = RabbitUtils.getConnection();//获取虚拟连接final Channel channel = connection.createChannel();//声明队列信息channel.queueDeclare(RabbitConstant.QUEUE_BAIDU, false, false, false, null);//queueBind用于将队列与交换机绑定//参数1:队列名 参数2:交互机名 参数三:路由key(暂时用不到)channel.queueBind(RabbitConstant.QUEUE_BAIDU, RabbitConstant.EXCHANGE_WEATHER, "");channel.basicQos(1);channel.basicConsume(RabbitConstant.QUEUE_BAIDU, false, new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("新浪天气收到气象信息:" + new String(body));channel.basicAck(envelope.getDeliveryTag(), false);}});}}
4.消费者Sina
import com.baiqi.rabbitmq.utils.RabbitConstant;import com.baiqi.rabbitmq.utils.RabbitUtils;import com.rabbitmq.client.*;import java.io.IOException;/*** 消费者*/public class Sina {public static void main(String[] args) throws IOException {//获取TCP长连接Connection connection = RabbitUtils.getConnection();//获取虚拟连接final Channel channel = connection.createChannel();//声明队列信息channel.queueDeclare(RabbitConstant.QUEUE_SINA, false, false, false, null);//queueBind用于将队列与交换机绑定//参数1:队列名 参数2:交互机名 参数三:路由key(暂时用不到)channel.queueBind(RabbitConstant.QUEUE_SINA, RabbitConstant.EXCHANGE_WEATHER, "");channel.basicQos(1);channel.basicConsume(RabbitConstant.QUEUE_SINA, false, new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("新浪天气收到气象信息:" + new String(body));channel.basicAck(envelope.getDeliveryTag(), false);}});}}
5.运行结果:




