Exchange fanout way to a more consumer producer

Disclaimer: This article is a blogger original article, shall not be reproduced without the bloggers allowed. https://blog.csdn.net/ko0491/article/details/90700576

Producers

package com.ghgcn.mq.test01;

import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;

public class Producer1 {

	private static String userName = "root";
	private static String password = "root123";
	private static String host = "localhost";
	private static String exchange = "fanout_exchange_test";
	private static String queue = "fanout_queue_test";
	private static int port = 5672;

	public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {

		ConnectionFactory factory = new ConnectionFactory();

		factory.setUsername(userName);
		factory.setPassword(password);
		factory.setHost(host);
		factory.setPort(port);

		// 1.建立连接
		Connection conn = factory.newConnection();
		// 2.建立信道

		Channel channel = conn.createChannel();

		// 3.使用交换器

		channel.exchangeDeclare(exchange, BuiltinExchangeType.FANOUT);
		
		
		//channel.queueDeclare(queue, true, false, false, null);

		byte[] body = "hello fanout ".getBytes();

		channel.basicPublish(exchange, "", MessageProperties.PERSISTENT_TEXT_PLAIN, body);
		System.out.println("发送完成");
		TimeUnit.SECONDS.sleep(10);
		channel.close();
		conn.close();
	}

}

A consumer

package com.ghgcn.mq.test01;

import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.AMQP.BasicProperties;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.ShutdownSignalException;

public class Consumer1 {

	private static String userName = "root";
	private static String password = "root123";
	private static String host = "localhost";
	private static String queue = "fanout_queue_test";
	private static String exchange = "fanout_exchange_test";
	private static int port = 5672;
	public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {

		ConnectionFactory factory = new ConnectionFactory();

		factory.setUsername(userName);
		factory.setPassword(password);
		factory.setHost(host);
		factory.setPort(port);

		// 1.建立连接
		Connection conn = factory.newConnection();
		// 2.建立信道
		Channel channel = conn.createChannel();
		
		
		channel.basicQos(5);
		
		 channel.exchangeDeclare(exchange, BuiltinExchangeType.FANOUT);
		 //获取系统的队列
		 //String queue2 = channel.queueDeclare().getQueue();
		 channel.queueDeclare(queue, true, false, false, null);
		 channel.queueBind(queue, exchange, "");
		 
		 
		channel.basicConsume(queue, new DefaultConsumer(channel) {

			@Override
			public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
					throws IOException {
				
				
				
				System.out.println("接收消息1: "+new String(body));
				
				System.out.println("consumerTag  "+consumerTag);
				System.out.println("envelope  "+envelope);
				System.out.println("properties  "+properties);
				
				channel.basicAck(envelope.getDeliveryTag(), false);
				
			}

			@Override
			public void handleConsumeOk(String consumerTag) {
				System.out.println("handleConsumeOk  "+consumerTag);
			}

			@Override
			public void handleCancelOk(String consumerTag) {
				System.out.println("handleCancelOk  "+consumerTag);
			}

			@Override
			public void handleCancel(String consumerTag) throws IOException {
				System.out.println("handleCancel  "+consumerTag);
			}

			@Override
			public void handleShutdownSignal(String consumerTag, ShutdownSignalException sig) {
				System.out.println("handleShutdownSignal  "+consumerTag);
			}

			@Override
			public void handleRecoverOk(String consumerTag) {
				System.out.println("handleRecoverOk  "+consumerTag);

			}
			
			
		});
		
			TimeUnit.SECONDS.sleep(10);
			channel.close();
			conn.close();
	}

}

Consumer two

package com.ghgcn.mq.test01;

import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.AMQP.BasicProperties;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.ShutdownSignalException;

public class Consumer2 {

	private static String userName = "root";
	private static String password = "root123";
	private static String host = "localhost";
	private static String queue = "fanout_queue_test2";
	private static String exchange = "fanout_exchange_test";
	private static int port = 5672;
	public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {

		ConnectionFactory factory = new ConnectionFactory();

		factory.setUsername(userName);
		factory.setPassword(password);
		factory.setHost(host);
		factory.setPort(port);

		// 1.建立连接
		Connection conn = factory.newConnection();
		// 2.建立信道
		Channel channel = conn.createChannel();
		
		
		channel.basicQos(5);
		
		 channel.exchangeDeclare(exchange, BuiltinExchangeType.FANOUT);
		//获取系统的队列
		 //String queue2 = channel.queueDeclare().getQueue();
		 channel.queueDeclare(queue, true, false, false, null);
		 channel.queueBind(queue, exchange, "");		 
		 
		channel.basicConsume(queue, new DefaultConsumer(channel) {

			@Override
			public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
					throws IOException {
				
				
				
				System.out.println("接收消息2: "+new String(body));
				
				System.out.println("consumerTag  "+consumerTag);
				System.out.println("envelope  "+envelope);
				System.out.println("properties  "+properties);
				
				channel.basicAck(envelope.getDeliveryTag(), false);
				
			}

			@Override
			public void handleConsumeOk(String consumerTag) {
				System.out.println("handleConsumeOk  "+consumerTag);
			}

			@Override
			public void handleCancelOk(String consumerTag) {
				System.out.println("handleCancelOk  "+consumerTag);
			}

			@Override
			public void handleCancel(String consumerTag) throws IOException {
				System.out.println("handleCancel  "+consumerTag);
			}

			@Override
			public void handleShutdownSignal(String consumerTag, ShutdownSignalException sig) {
				System.out.println("handleShutdownSignal  "+consumerTag);
			}

			@Override
			public void handleRecoverOk(String consumerTag) {
				System.out.println("handleRecoverOk  "+consumerTag);

			}
			
			
		});
		
			TimeUnit.SECONDS.sleep(10);
			channel.close();
			conn.close();
	}

}

Consumers and consumer queue must either a two, like, (as if) Otherwise, a consumer can only receive messages, not receive another message

First start the two are consumption, production will start again
Here Insert Picture Description

Here Insert Picture Description

Guess you like

Origin blog.csdn.net/ko0491/article/details/90700576