RabbitMQ 安裝延遲交換機delay-exchange
- 2020 年 3 月 11 日
- 筆記

安裝RabbitMQ 延遲交換機 在三台節點上安裝延遲交換機插件 1.進入RabbitMQ 插件目錄
cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.12/plugins
2.下載延遲插件安裝包
wget https://dl.bintray.com/rabbitmq/community-plugins/3.6.x/rabbitmq_delayed_message_exchange/rabbitmq_delayed_message_exchange-20171215-3.6.x.zip
3.解壓延遲插件安裝包
unzip rabbitmq_delayed_message_exchange--3.6.x.zip
將RAM 節點修改成DISK 節點 在 RAM 節點上,將節點修改成磁碟節點
rabbitmqctl stop_app rabbitmqctl change_cluster_node_type disk rabbitmqctl start_app
啟動延遲交換機插件 在三台節點上啟動延遲交換機插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
測試程式碼:
Producer:
import java.util.Date; import java.util.HashMap; import java.util.Map; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class Producer { public static void main(String[] args) throws Exception { ConnectionFactory connectionFactory = new ConnectionFactory(); connectionFactory.setVirtualHost("/"); connectionFactory.setHost("172.31.1.135"); connectionFactory.setUsername("xx"); connectionFactory.setPassword("xx"); connectionFactory.setPort(); Connection connection = connectionFactory.newConnection(); Channel channel = connection.createChannel(); String exchangeName = "delay-exchange"; String routingkey = "delay.delay"; String queueName = "delay_queueName"; //x-delayed-message 聲明 Map<String,Object> map =new HashMap<>(); map.put("x-delayed-type", "direct"); channel.exchangeDeclare(exchangeName, "x-delayed-message", true, false, map); //注意:arguments需要聲明在隊列上,聲明在交換機上是不會起作用的。 channel.queueDeclare(queueName, true, false, false, map); channel.queueBind(queueName,exchangeName,routingkey); for (int i = ; i < ; i++) { // deliveryMode=2 持久化,expiration 消息有效時間 String msg = "delayed payload".getBytes("UTF-8") +" "+new Date().getTime(); byte[] messageBodyBytes = msg.getBytes(); Map<String, Object> headers = new HashMap<String, Object>(); headers.put("x-delay", ); AMQP.BasicProperties.Builder props = new AMQP.BasicProperties.Builder().headers(headers); channel.basicPublish(exchangeName, routingkey, props.build(), messageBodyBytes); } } } Consumer:
import java.io.IOException; import java.util.Date; import com.rabbitmq.client.AMQP.BasicProperties; 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; public class Consumer { public static void main(String[] args) throws Exception { ConnectionFactory connectionFactory = new ConnectionFactory(); connectionFactory.setVirtualHost("/"); connectionFactory.setHost("172.31.1.135"); connectionFactory.setPort(); connectionFactory.setUsername("xxx"); connectionFactory.setPassword("xxx"); Connection connection = connectionFactory.newConnection(); Channel channel = connection.createChannel(); String queueName = "delay_queueName"; channel.queueDeclare(queueName,true,false,false,null); channel.basicConsume(queueName, false, "myConsumer Tag", new DefaultConsumer(channel){ @Override public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body) throws IOException { String routingKey = envelope.getRoutingKey(); String convernType = properties.getContentType(); long deliveryTag = envelope.getDeliveryTag(); System.out.println("routingKey:"+routingKey+",convernType:"+convernType+",deliveryTag:"+deliveryTag+",Msg body:"+new String(body)+ " "+new Date().getTime()); channel.basicAck(deliveryTag, false); } }); } } 執行結果:
routingKey:delay.delay,convernType:null,deliveryTag:,Msg body:[B@c703b routingKey:delay.delay,convernType:null,deliveryTag:,Msg body:[B@cbc42f routingKey:delay.delay,convernType:null,deliveryTag:,Msg body:[B@c2f routingKey:delay.delay,convernType:null,deliveryTag:,Msg body:[B@c703b routingKey:delay.delay,convernType:null,deliveryTag:,Msg body:[B@cbc42f routingKey:delay.delay,convernType:null,deliveryTag:,Msg body:[B@c2f
歡迎關註:【程式設計師開發者社區】

