【参考】RabbitMQ使用场景练习:Validated User ID、Length Limit(十二 )

  • Validated User ID

发送消息时指定userid,只有是当前conn的用户名才可以发送出去消息(测试发现非当前conn用户名,队列没有也没有创建,可能因为是在同一个channel)。用于消费者consumer需要知道消息是从哪个用户发过来的情况 

 

Java代码  收藏代码

  1. package com.demo.mq.rabbitmq.example12;  
  2. import java.io.IOException;  
  3. import java.io.Serializable;  
  4. import java.util.concurrent.TimeoutException;  
  5. import org.apache.commons.lang3.SerializationUtils;  
  6. import com.demo.mq.rabbitmq.MqManager;  
  7. import com.rabbitmq.client.AMQP.BasicProperties;  
  8. import com.rabbitmq.client.AMQP.BasicProperties.Builder;  
  9. import com.rabbitmq.client.AMQP;  
  10. import com.rabbitmq.client.BlockedListener;  
  11. import com.rabbitmq.client.Channel;  
  12. import com.rabbitmq.client.Connection;  
  13. import com.rabbitmq.client.DefaultConsumer;  
  14. import com.rabbitmq.client.Envelope;  
  15.   
  16. /** 
  17.  * 校验User ID 
  18.  * @author sheungxin 
  19.  * 
  20.  */  
  21. public class ValidUserSend {  
  22.     private static String userId="sheungxin";  
  23.       
  24.     /** 
  25.      * 发送消息时校验userId 
  26.      * @param mes 
  27.      * @throws IOException 
  28.      * @throws TimeoutException 
  29.      */  
  30.     public static void validUserSend(Serializable mes) throws IOException, TimeoutException{  
  31.         Connection conn=MqManager.newConnection();  
  32.         //链接堵塞监听器,除此还有ShutdownListener(非本用例的重点,略带一下)  
  33.         conn.addBlockedListener(new BlockedListener() {  
  34.               
  35.             @Override  
  36.             public void handleUnblocked() throws IOException {  
  37.                 // connection is now unblocked  
  38.             }  
  39.               
  40.             @Override  
  41.             public void handleBlocked(String reason) throws IOException {  
  42.                 // connection is now blocked  
  43.             }  
  44.         });  
  45.   
  46.         Channel channel=conn.createChannel();  
  47.         String queueName=channel.queueDeclare().getQueue();  
  48.         //声明消费者用于接收消息(发在basicPublish后面也可以接收到消息,可能因为在同一个channel)  
  49.         channel.basicConsume(queueName, truenew DefaultConsumer(channel){  
  50.             @Override  
  51.             public void handleDelivery(String consumerTag,Envelope envelope,AMQP.BasicProperties properties,byte[] body) throws IOException{  
  52.                 System.out.println(SerializationUtils.deserialize(body));  
  53.             }  
  54.         });  
  55.         //发送消息时指定userid,只有是当前conn的用户名才可以发送出去消息(测试发现非当前conn用户名,队列没有也没有创建,可能因为是在同一个channel)  
  56.         Builder properties=new BasicProperties.Builder();  
  57.         properties.userId(userId);  
  58.         channel.basicPublish("", queueName, properties.build(), SerializationUtils.serialize(mes));  
  59.     }  
  60.       
  61.     public static void main(String[] args) throws IOException, TimeoutException {  
  62.         validUserSend("Hello World!");  
  63.     }  
  64.   
  65. }  

 

  • Queue Length Limit

x-max-length:指队列中可存放的最大消息数量,不是队列中单条消息的最大长度 
max-length-bytes:指队列中存放消息内容的最大字节长度 

 

 

Java代码  收藏代码

  1. Map<String, Object> args = new HashMap<String, Object>();  
  2. args.put("x-max-length"10);  
  3. //args.put("x-max-length-bytes",10000);  
  4. channel.queueDeclare("myqueue"falsefalsefalse, args);  


可通过服务端策略设定 

 

Java代码  收藏代码

  1. rabbitmqctl set_policy Ten "^one-meg$" '{"max-length-bytes":1000000}' --apply-to queues  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值