发送消息时指定userid,只有是当前conn的用户名才可以发送出去消息(测试发现非当前conn用户名,队列没有也没有创建,可能因为是在同一个channel)。用于消费者consumer需要知道消息是从哪个用户发过来的情况
package com.demo.mq.rabbitmq.example12;
import java.io.IOException;
import java.io.Serializable;
import java.util.concurrent.TimeoutException;
import org.apache.commons.lang3.SerializationUtils;
import com.demo.mq.rabbitmq.MqManager;
import com.rabbitmq.client.AMQP.BasicProperties;
import com.rabbitmq.client.AMQP.BasicProperties.Builder;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.BlockedListener;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
/**
* 校验User ID
* @author sheungxin
*
*/
public class ValidUserSend {
private static String userId="sheungxin";
/**
* 发送消息时校验userId
* @param mes
* @throws IOException
* @throws TimeoutException
*/
public static void validUserSend(Serializable mes) throws IOException, TimeoutException{
Connection conn=MqManager.newConnection();
//链接堵塞监听器,除此还有ShutdownListener(非本用例的重点,略带一下)
conn.addBlockedListener(new BlockedListener() {
@Override
public void handleUnblocked() throws IOException {
// connection is now unblocked
}
@Override
public void handleBlocked(String reason) throws IOException {
// connection is now blocked
}
});
Channel channel=conn.createChannel();
String queueName=channel.queueDeclare().getQueue();
//声明消费者用于接收消息(发在basicPublish后面也可以接收到消息,可能因为在同一个channel)
channel.basicConsume(queueName, true, new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag,Envelope envelope,AMQP.BasicProperties properties,byte[] body) throws IOException{
System.out.println(SerializationUtils.deserialize(body));
}
});
//发送消息时指定userid,只有是当前conn的用户名才可以发送出去消息(测试发现非当前conn用户名,队列没有也没有创建,可能因为是在同一个channel)
Builder properties=new BasicProperties.Builder();
properties.userId(userId);
channel.basicPublish("", queueName, properties.build(), SerializationUtils.serialize(mes));
}
public static void main(String[] args) throws IOException, TimeoutException {
validUserSend("Hello World!");
}
}
x-max-length:指队列中可存放的最大消息数量,
不是队列中单条消息的最大长度
max-length-bytes:指队列中存放消息内容的最大字节长度
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-max-length", 10);
//args.put("x-max-length-bytes",10000);
channel.queueDeclare("myqueue", false, false, false, args);
可通过服务端策略设定
rabbitmqctl set_policy Ten "^one-meg$" '{"max-length-bytes":1000000}' --apply-to queues
分享到:
相关推荐
RabbitMQ学习实践二:MQ的安装
RabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送...
rabbitmq-server-3.9.11.exe
**RabbitMQ 消息中间件在抢购场景中的应用** 在现代互联网应用中,抢购活动已经成为一种常见的促销手段,吸引大量用户在同一时间参与。为了处理这种高并发的业务场景,开发人员需要采取有效的方式来分发和处理大量...
【RabbitMQ集群搭建指南】 在企业IT架构中,消息队列(MQ)扮演着至关重要的角色,它能够实现异步处理、解耦系统组件、提高系统吞吐量。RabbitMQ作为开源MQ的佼佼者,凭借其高效、稳定和易扩展的特性,广泛应用于...
rabbitmq-3.10.6:management
本文档为 RabbitMq 使用手册,介绍了 RabbitMq 的应用场景和开发指导。RabbitMq 是一个由 Erlang 开发的 AMQP(Advanced Message Queue)流行的开源消息队列系统。RabbitMq 的结构图如下: RabbitMq 几个概念说明:...
【课程目录】:---第一章:RabbitMQ介绍----1-什么是消息中间件.mp4----2-RabbitMQ消息队列安装:window环境.mp4----3-RabbitMQ消息队列安装 :Linux环境.mp4----4-Rabbitmq入口示例:server.mp4----5-rabbitmq入口...
rabbitmq-3.7.28-management-alpine 离线镜像安装包
1. 拉取 RabbitMQ 镜像:使用 Docker 的 pull 命令拉取 RabbitMQ 镜像,例如:`docker pull rabbitmq:3.9.8-management`。 2. 启动 RabbitMQ 容器:使用 Docker 的 run 命令启动 RabbitMQ 容器,例如:`docker run -...
《RabbitMQ实战:高效部署分布式消息队列》是一本深度解析RabbitMQ技术的书籍,专注于帮助读者理解和掌握如何在实际项目中高效地部署和使用这个强大的消息中间件。RabbitMQ作为开源的消息代理和队列服务器,广泛应用...
rabbitmq面试:RabbitMQ相关的面试题和问题解析 rabbitmq面试:RabbitMQ相关的面试题和问题解析 rabbitmq面试:RabbitMQ相关的面试题和问题解析 rabbitmq面试:RabbitMQ相关的面试题和问题解析 rabbitmq面试:...
rabbitmq: host: your-rabbitmq-host port: your-rabbitmq-port username: your-username password: your-password ``` 然后,定义消息的交换机(Exchange)、队列(Queue)以及路由键(Routing Key)。这通常...
标题 "kettle rabbitmq 插件开发" 涉及的是如何在 Pentaho Kettle(也称为 Spoon)中创建和使用 RabbitMQ 插件。Kettle 是一个开源的数据集成工具,它允许用户进行数据抽取、转换和加载(ETL)操作。RabbitMQ 是一个...
C# rabbitmq项目实战源码,在网上找了大量的MQ资料用C#语言开发的各种场景示例,从路由及列队的配置,到场景代码的开发,使用场景基本上都是通过生产者与消费者,发布订阅模式的示例,程序使用WindowForm开发的重要...
RabbitMQ中文文档 RabbitMQ是一个消息代理,它可以为应用程序提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全。RabbitMQ提供了多种技术可以让你在性能和可靠性之间进行权衡。这些技术包括持久性...
image : rabbitmq:3-management container_name : rabbitmq volumes : - rabbitmq-vol:/var/lib/rabbitmq - rabbitmq-log:/var/log/rabbitmq - ./conf/:/etc/rabbitmq/ networks : - rabbitmq-net 步骤2:...
RabbitMQ C AMQP客户端库 介绍 这是C语言AMQP客户端库,可与代理的v2.0 +一起使用。 有关该库的公告会定期在rabbitmq-c用户上发布,并交叉发布到rabbitmq-users。 最新稳定版 可以在以下位置找到rabbitmq-c的最新...
RabbitMQ是一款开源的消息队列系统,基于AMQP(Advanced Message Queuing Protocol)协议实现,广泛应用于分布式系统中的异步任务处理、解耦组件通信以及负载均衡。在本指南中,我们将详细介绍如何在线安装RabbitMQ...