- 浏览: 626488 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (819)
- java开发 (110)
- 数据库 (56)
- javascript (30)
- 生活、哲理 (17)
- jquery (36)
- 杂谈 (15)
- linux (62)
- spring (52)
- kafka (11)
- http协议 (22)
- 架构 (18)
- ZooKeeper (18)
- eclipse (13)
- ngork (2)
- dubbo框架 (6)
- Mybatis (9)
- 缓存 (28)
- maven (20)
- MongoDB (3)
- 设计模式 (3)
- shiro (10)
- taokeeper (1)
- 锁和多线程 (3)
- Tomcat7集群 (12)
- Nginx (34)
- nodejs (1)
- MDC (1)
- Netty (7)
- solr (15)
- JSON (8)
- rabbitmq (32)
- disconf (7)
- PowerDesigne (0)
- Spring Boot (31)
- 日志系统 (6)
- erlang (2)
- Swagger (3)
- 测试工具 (3)
- docker (17)
- ELK (2)
- TCC分布式事务 (2)
- marathon (12)
- phpMyAdmin (12)
- git (3)
- Atomix (1)
- Calico (1)
- Lua (7)
- 泛解析 (2)
- OpenResty (2)
- spring mvc (19)
- 前端 (3)
- spring cloud (15)
- Netflix (1)
- zipkin (3)
- JVM 内存模型 (5)
- websocket (1)
- Eureka (4)
- apollo (2)
- idea (2)
- go (1)
- 业务 (0)
- idea开发工具 (1)
最新评论
-
sichunli_030:
对于频繁调用的话,建议采用连接池机制
配置TOMCAT及httpClient的keepalive以高效利用长连接 -
11想念99不见:
你好,我看不太懂。假如我的项目中会频繁调用rest接口,是要用 ...
配置TOMCAT及httpClient的keepalive以高效利用长连接
Routing key由生产者指定。Binding key由消费者指定。二者联合决定一条消息的来去。
连接
ConnectionFactory factory = new ConnectionFactory(); factory.setHost(hostName); Connection conn = factory.newConnection(); Channel channel = conn.createChannel();
- 以上是得到一个rabbitmq连接最最基础的代码,当然了,还可以设置一些诸如用户名密码的事情。
- 最后这个channel就可以用来收和发消息了。
消息者线程池
ExecutorService es = Executors.newFixedThreadPool(20); Connection conn = factory.newConnection(es);
- 消费者时使用,上述自动开了一20个线程的池来搞
地址数组
Address[] addrArr = new Address[]{ new Address(hostname1, portnumber1) , new Address(hostname2, portnumber2)}; Connection conn = factory.newConnection(addrArr);
- 上述代码如果连hostname1失败了就去hostname2
- factory.newConnection()会触发这个检测
声明exchange与queue
channel.exchangeDeclare(exchangeName, "direct", true); String queueName = channel.queueDeclare().getQueue(); channel.queueBind(queueName, exchangeName, routingKey);
- channel.exchangeDeclare 参数有 交换机名字 类型 是否持久化 不使用时是否自动删除 是否是内部的(不能被客户端使用) 其他参数
- channel.queueDeclare 参数有 queue名字 是否持久化 独占的queue(仅供此连接) 不使用时是否自动删除 其他参数
- channel.queueBind 参数有 queue名字 交换机名字 此次绑定使用的路由关键字 其他参数
发出消息
byte[] messageBodyBytes = "Hello, world!".getBytes(); channel.basicPublish(exchangeName, routingKey, null, messageBodyBytes);
- channel.basicPublish 参数有 要发出的交换机名字 路由关键字 是否强制(设置为true时,找不到收的人时可以通过returnListener返回) 是否立即(其实rabbitmq不支持) 其他属性 消息主体
线程安全
- Channel是线程好全的,但是最好是每个线程里用自己的Channel,因为在单个Channel里排队是有可能慢一些的
最简单的办法消费消息
boolean autoAck = false; channel.basicConsume(queueName, autoAck, "myConsumerTag", new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String routingKey = envelope.getRoutingKey(); String contentType = properties.contentType; long deliveryTag = envelope.getDeliveryTag(); // (process the message components here ...) channel.basicAck(deliveryTag, false); } });
- 一个Channel一个Consumer
- channel.basicAck 回发ACK 参数 tag 是否多个
零碎
- channel.basicQos 指定服务质量设置 参数 最大的投送字节数 最大的投送消息数量 设置是否要应用到整个channel(而不是一个消费者)
- factory.setAutomaticRecoveryEnabled(true) 网络有问题时,好后可自动恢复设置
- cf.setRequestedHeartbeat(5) 设置心跳时间
- exchange type可用的值:direct topic headers fanout
- exchange的类型有一个default,basicPublish没有指定时使用,而且,如果routingKey在指定绑定的时候,会去到绑定的exchange
- channel.queueDeclare().getQueue() 得到的是一个随机queue,断开连接后即删除
- 当exchange为direct的时候routingKey与bindingKey必须完全一致才能消费消息
转自:http://www.cnblogs.com/dwlsxj/p/RabbitMQ.html
http://itindex.net/detail/50865-rabbitmq-java-client
发表评论
-
RocketMQ教程,包含所有MQ核心知识点!
2022-04-28 13:49 156RocketMQ教程,包含所有MQ核心知识点 原创 | Ja ... -
rabbitmq死信队列和延时队列的使用
2021-12-25 23:19 242rabbitmq死信队列和延时队列的使用 -
IM消息送达保证机制实现(一):保证在线实时消息的可靠投递
2021-12-14 11:49 165[url=http://www.52im.net/thread ... -
RabbitMQ高级特性TTL队列/消息
2021-09-04 22:47 212RabbitMQ高级特性-TTL队列/消息 RabbitMQ ... -
如何保证消息不丢失,消息顺序执行-面试
2021-05-26 20:24 232关于MQ的几件小事(四)如何保证消息不丢失 如何保证Rab ... -
RabbitMQ 相关问题汇总
2017-06-28 17:43 427RabbitMQ 相关问题汇总 rabbitmq基础概念与基 ... -
rabbitMq集成Spring后,消费者设置手动ack,并且在业务上控制是否ack
2017-06-12 20:30 2156http://blog.csdn.net/u010841296 ... -
rabbitmq消费消息的两种方式
2016-12-05 20:12 999rabbitMQ中consumer通过建立到queue的连接, ... -
rabbitmq——镜像队列
2016-12-02 20:05 11201. 镜像队列的设置 镜像队列的配置通过添加policy完成 ... -
RabbitMQ 内部实现
2016-12-01 14:41 1015http://blog.csdn.net/joeyon1985 ... -
OpenStack RabbitMQ 集群-后续整理
2016-12-01 14:18 503参考:http://www.iyunv.com/thread- ... -
RabbitMQ (三) 发布/订阅
2016-11-30 19:53 5561、转发器(Exchanges) ... -
RabbitMQ学习(六)之远程过程调用(RPC)
2016-11-30 14:31 836在一般使用RabbitMQ做RPC很容易。客户端发送一个请求消 ... -
RabbitMQ学习之Headers交换类型
2016-11-28 10:51 791Headers类型的exchange使用的比较少,它也是忽略r ... -
RabbitMQ能打开的最大连接数
2016-11-28 10:29 2572转自:http://blog.csdn.net/huoyuns ... -
RabbitMQ Consumer获取消息的两种方式(poll,subscribe)解析
2016-11-25 21:36 884rabbitMQ中consumer通过建立到queue的连接, ... -
解决RabbitMQ远程不能访问的问题
2016-11-24 15:18 1163刚刚安装的RabbitMQ-Server-3.3.5,并且 ... -
RabbitMQ用户角色及权限控制
2016-11-24 11:08 1751RabbitMQ:基本命令 rabbitmq的安装、启动和停 ... -
publish消息确认
2016-11-23 18:01 664Using standard AMQP, the only w ... -
rabbitMQ ConfirmListener
2016-11-23 15:53 2154消息消费者 操作步骤: 1. 创建连接工厂Connection ...
相关推荐
以下是对RabbitMQ基础知识的详细解释: 1. **消息持久化** - 消息持久化是确保即使RabbitMQ服务重启,消息也不会丢失的关键特性。这包括交换机(exchange)、队列(queue)和消息(message)的持久化。 - 在声明交换机...
Broker:简单来说就是消息队列服务器实体。 Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。 Queue:消息队列载体,每个消息都会被投入到一个或多个队列。 Binding:绑定,它的作用就是把exchange和...
#### 二、RabbitMQ基础知识 **1. 消息队列概念** - **定义**:消息队列是一种用于应用程序间异步通信的数据结构,它允许发送方将消息发送到队列中,而接收方可以从队列中取出消息进行处理。 - **作用**:提高系统...
**RabbitMQ基础** RabbitMQ是一个开源的消息代理和队列服务器,用于在分布式系统中进行消息传递。它是基于AMQP(Advanced Message Queuing Protocol)协议实现的,提供了高可用性、可扩展性和稳定性。RabbitMQ的...
一、RabbitMQ基础知识 1. **消息队列**:RabbitMQ的核心是消息队列,它作为中间件存储和转发消息,确保生产者和消费者之间解耦。生产者发送消息到队列,而消费者从队列中接收消息,两者并不直接交互。 2. **节点与...
### RabbitMQ基础知识与核心概念 RabbitMQ是一种开源的消息代理软件,它支持多种消息协议,如AMQP(Advanced Message Queuing Protocol)。RabbitMQ能够帮助应用程序实现消息队列功能,从而使得消息能够在生产者...
### RabbitMQ基础知识与应用 #### 一、RabbitMQ简介 RabbitMQ 是一款开源的消息代理软件,也是 AMQP(Advanced Message Queuing Protocol)标准的一个实现。它支持多种消息传递模式,包括点对点(Direct)、发布/...
【RabbitMQ基础知识】 RabbitMQ是一个开源的消息代理和队列服务器,它基于高级消息队列协议(AMQP)标准,被广泛应用于分布式系统中,用于处理异步任务和组件间的解耦。它使用Erlang语言开发,支持多种编程语言的...
2. **RabbitMQ基础知识**: - **Exchange**: 交换机是RabbitMQ中的一个核心概念,它根据路由键和绑定规则将消息分发到对应的队列。 - **Queue**: 队列是存储消息的地方,每个消息至少被一个队列接收,可以有多个...
1. **RabbitMQ基础知识**: - **消息中间件**:RabbitMQ作为消息中间件,负责接收、存储和转发消息,使应用程序之间可以解耦通信。 - **AMQP协议**:它是跨平台的开放式标准,定义了消息的格式和交互方式,保证了...
#### 二、RabbitMQ基础知识 1. **概念理解** - **消息队列**:一种存储并转发消息的应用程序,用于实现生产者与消费者之间的解耦。 - **RabbitMQ**:基于AMQP 0-9-1协议的消息中间件,支持多种消息协议与插件,...
**RabbitMQ基础知识:** RabbitMQ是基于AMQP(Advanced Message Queuing Protocol)协议的,它允许应用程序之间进行异步通信,从而提高系统的可扩展性和可靠性。消息队列的原理是生产者(Producer)发送消息到队列,...
#### 一、RabbitMQ基础知识 1. **消息队列的概念**: - 消息队列是一种应用程序间通信的模式,它通过在发送者和接收者之间传递消息来实现解耦。 - RabbitMQ是一种开源的消息代理软件,支持多种消息队列协议,如...
#### 四、RabbitMQ基础知识 1. **简介**:RabbitMQ是一款开源的消息代理软件,支持多种消息传递协议。 2. **特点**: - **可靠性**:支持消息确认机制,确保消息不丢失。 - **灵活性**:提供多种交换机类型(如...
RabbitMQ 相关知识点总结 RabbitMQ 是一种消息中间件,全称为 Message Queue,用于实现上下游传递消息,提供了消息队列、消息路由、消息消费等功能。下面是 RabbitMQ 相关知识点总结: 基础理论 * Broker:消息...
### RabbitMQ基础教程知识点详解 #### 一、RabbitMQ简介 RabbitMQ是一种开源的消息代理和队列服务器,基于AMQP(Advanced Message Queuing Protocol)标准开发,它提供了多种编程语言的API接口,能够方便地与其他...
在使用`rabbitmq-c`时,开发者需要理解AMQP协议的基础知识,包括交换机、队列、绑定和消息路由策略。同时,熟悉C编程和错误处理技巧也是必要的,因为`rabbitmq-c`的API是C语言风格的,需要手动管理内存和错误检查。 ...
RabbitMQ是一个开源的消息代理和队列服务器,广泛用于分布式系统中的消息传递。它基于AMQP(Advanced Message Queuing Protocol)标准,允许应用...了解这些知识点对于在Windows环境中部署和管理RabbitMQ服务至关重要。
**一、RabbitMQ基础** 1. **消息中间件**: 消息中间件是分布式系统中的重要组成部分,它允许不同组件之间通过异步通信进行解耦。RabbitMQ作为这样的中间件,负责接收、存储和转发消息。 2. **AMQP协议**: AMQP是一...