import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class DirectProducer { public static void main(String[] args) throws Exception { //1. 建立一個 ConnectionFactory 並進行設置 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setVirtualHost("/"); factory.setUsername("guest"); factory.setPassword("guest"); //2. 經過鏈接工廠來建立鏈接 Connection connection = factory.newConnection(); //3. 經過 Connection 來建立 Channel Channel channel = connection.createChannel(); //4. 聲明 String exchangeName = "test_direct_exchange"; String routingKey = "item.direct"; //5. 發送 String msg = "this is direct msg"; channel.basicPublish(exchangeName, routingKey, null, msg.getBytes()); System.out.println("Send message : " + msg); //6. 關閉鏈接 channel.close(); connection.close(); } }
import com.rabbitmq.client.*; import java.io.IOException; public class DirectConsumer { public static void main(String[] args) throws Exception { //1. 建立一個 ConnectionFactory 並進行設置 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setVirtualHost("/"); factory.setUsername("guest"); factory.setPassword("guest"); factory.setAutomaticRecoveryEnabled(true); factory.setNetworkRecoveryInterval(3000); //2. 經過鏈接工廠來建立鏈接 Connection connection = factory.newConnection(); //3. 經過 Connection 來建立 Channel Channel channel = connection.createChannel(); //4. 聲明 String exchangeName = "test_direct_exchange"; String queueName = "test_direct_queue"; String routingKey = "item.direct"; channel.exchangeDeclare(exchangeName, "direct", true, false, null); channel.queueDeclare(queueName, false, false, false, null); //通常不用代碼綁定,在管理界面手動綁定 channel.queueBind(queueName, exchangeName, routingKey); //5. 建立消費者並接收消息 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(" [x] Received '" + message + "'"); } }; //6. 設置 Channel 消費者綁定隊列 channel.basicConsume(queueName, true, consumer); } }
Send message : this is direct msg [x] Received 'this is direct msg'
能夠使用通配符進行模糊匹配ide
例如:this
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class TopicProducer { public static void main(String[] args) throws Exception { //1. 建立一個 ConnectionFactory 並進行設置 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setVirtualHost("/"); factory.setUsername("guest"); factory.setPassword("guest"); //2. 經過鏈接工廠來建立鏈接 Connection connection = factory.newConnection(); //3. 經過 Connection 來建立 Channel Channel channel = connection.createChannel(); //4. 聲明 String exchangeName = "test_topic_exchange"; String routingKey1 = "item.update"; String routingKey2 = "item.delete"; String routingKey3 = "user.add"; //5. 發送 String msg = "this is topic msg"; channel.basicPublish(exchangeName, routingKey1, null, msg.getBytes()); channel.basicPublish(exchangeName, routingKey2, null, msg.getBytes()); channel.basicPublish(exchangeName, routingKey3, null, msg.getBytes()); System.out.println("Send message : " + msg); //6. 關閉鏈接 channel.close(); connection.close(); } }
import com.rabbitmq.client.*; import java.io.IOException; public class TopicConsumer { public static void main(String[] args) throws Exception { //1. 建立一個 ConnectionFactory 並進行設置 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setVirtualHost("/"); factory.setUsername("guest"); factory.setPassword("guest"); factory.setAutomaticRecoveryEnabled(true); factory.setNetworkRecoveryInterval(3000); //2. 經過鏈接工廠來建立鏈接 Connection connection = factory.newConnection(); //3. 經過 Connection 來建立 Channel Channel channel = connection.createChannel(); //4. 聲明 String exchangeName = "test_topic_exchange"; String queueName = "test_topic_queue"; String routingKey = "item.#"; channel.exchangeDeclare(exchangeName, "topic", true, false, null); channel.queueDeclare(queueName, false, false, false, null); //通常不用代碼綁定,在管理界面手動綁定 channel.queueBind(queueName, exchangeName, routingKey); //5. 建立消費者並接收消息 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(" [x] Received '" + message + "'"); } }; //6. 設置 Channel 消費者綁定隊列 channel.basicConsume(queueName, true, consumer); } }
Send message : this is topc msg [x] Received 'this is topc msg' [x] Received 'this is topc msg'
不處理路由鍵,只須要簡單的將隊列綁定到交換機上發送到交換機的消息都會被轉發到與該交換機綁定的全部隊列上。
Fanout交換機轉發消息是最快的。code
import com.rabbitmq.client.*; import java.io.IOException; public class FanoutConsumer { public static void main(String[] args) throws Exception { //1. 建立一個 ConnectionFactory 並進行設置 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setVirtualHost("/"); factory.setUsername("guest"); factory.setPassword("guest"); factory.setAutomaticRecoveryEnabled(true); factory.setNetworkRecoveryInterval(3000); //2. 經過鏈接工廠來建立鏈接 Connection connection = factory.newConnection(); //3. 經過 Connection 來建立 Channel Channel channel = connection.createChannel(); //4. 聲明 String exchangeName = "test_fanout_exchange"; String queueName = "test_fanout_queue"; String routingKey = "item.#"; channel.exchangeDeclare(exchangeName, "fanout", true, false, null); channel.queueDeclare(queueName, false, false, false, null); //通常不用代碼綁定,在管理界面手動綁定 channel.queueBind(queueName, exchangeName, routingKey); //5. 建立消費者並接收消息 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(" [x] Received '" + message + "'"); } }; //6. 設置 Channel 消費者綁定隊列 channel.basicConsume(queueName, true, consumer); } }
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class FanoutProducer { public static void main(String[] args) throws Exception { //1. 建立一個 ConnectionFactory 並進行設置 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setVirtualHost("/"); factory.setUsername("guest"); factory.setPassword("guest"); //2. 經過鏈接工廠來建立鏈接 Connection connection = factory.newConnection(); //3. 經過 Connection 來建立 Channel Channel channel = connection.createChannel(); //4. 聲明 String exchangeName = "test_fanout_exchange"; String routingKey1 = "item.update"; String routingKey2 = ""; String routingKey3 = "ookjkjjkhjhk";//任意routingkey //5. 發送 String msg = "this is fanout msg"; channel.basicPublish(exchangeName, routingKey1, null, msg.getBytes()); channel.basicPublish(exchangeName, routingKey2, null, msg.getBytes()); channel.basicPublish(exchangeName, routingKey3, null, msg.getBytes()); System.out.println("Send message : " + msg); //6. 關閉鏈接 channel.close(); connection.close(); } }
Send message : this is fanout msg [x] Received 'this is fanout msg' [x] Received 'this is fanout msg' [x] Received 'this is fanout msg'