RabbitMQ-fanout模式

1.消费者

package com.touch.fanout;
import cn.hutool.core.util.RandomUtil;
import com.rabbitmq.client.*;
import com.touch.utils.RabbitMQUtil;
import java.io.IOException;
import java.util.Date;
import java.util.concurrent.TimeoutException;
public class TestCustomer {
	public final static String EXCHANGE_NAME="fanout_exchange";
	public static void main(String[] args) throws IOException, TimeoutException {
		//为当前消费者取随机名
		final String name = "consumer-"+ RandomUtil.randomString(5);
		//判断服务器是否启动
		RabbitMQUtil.checkServer();
		// 创建连接工厂
		ConnectionFactory factory = new ConnectionFactory();
		//设置RabbitMQ地址
		factory.setHost("localhost");
		//创建一个新的连接
		Connection connection = factory.newConnection();
		//创建一个通道
		Channel channel = connection.createChannel();
		//交换机声明(参数为:交换机名称;交换机类型)
		channel.exchangeDeclare(EXCHANGE_NAME,"fanout");
		//获取一个临时队列
		String queueName = channel.queueDeclare().getQueue();
		//队列与交换机绑定(参数为:队列名称;交换机名称;routingKey忽略)
		channel.queueBind(queueName,EXCHANGE_NAME,"");
		System.out.println(name +" 等待接受消息");
		//DefaultConsumer类实现了Consumer接口,通过传入一个频道,
		// 告诉服务器我们需要那个频道的消息,如果频道中有消息,就会执行回调函数handleDelivery
		Consumer consumer = new DefaultConsumer(channel){
			@Override
			public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
					throws IOException {
				String message = new String(body, "UTF-8");
				System.out.println(new Date()+" "+name + " 接收到消息 '" + message + "'");
			}
		};
		//自动回复队列应答 -- RabbitMQ中的消息确认机制
		channel.basicConsume(queueName, true, consumer);
	}
}

2.生产者

package com.touch.fanout;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.touch.utils.RabbitMQUtil;
import java.io.IOException;
import java.util.Date;
import java.util.concurrent.TimeoutException;
/**
 * 启动生产者,生产100条信息。
 * 两个消费者都能收到这100条信息。和ActiveMQ主题模式类似
 */
public class TestProducer {
	public final static String EXCHANGE_NAME="fanout_exchange";
	public static void main(String[] args) throws IOException, TimeoutException {
		RabbitMQUtil.checkServer();
		//创建连接工厂
		ConnectionFactory factory= new ConnectionFactory();
		//设置RabbitMQ相关信息
		factory.setHost("localhost");
		//创建一个新的连接
		Connection connection =factory.newConnection();
		//创建一个通道
		Channel channel = connection.createChannel();
		channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
		for (int i = 0; i <100 ; i++) {
			String message="direct 消息 " +i;
			channel.basicPublish(EXCHANGE_NAME,"",null,message.getBytes("UTF-8"));
			System.out.println(new Date()+" "+"发送消息:" + message);
		}
		//关闭通道和连接
		channel.close();
		connection.close();
	}
}

[源代码地址:https://github.com/hyghub/javanotes]
[学 习 地 址:http://how2j.cn/k/message/message-rabbitmq-type/2031.html]

你可能感兴趣的:(消息中间件)