
rabbitmq
朱小厮
你知道的越多 你不知道的也就越多
展开
-
RabbitMQ负载均衡(1)
面对大量业务访问、高并发请求可以使用高性能的服务器来提升RabbitMQ服务的负载能力。当单机容量达到极限时,我们可以采取集群的策略来对负载能力做进一步的提升,但是这里还存在一个负载不均衡的问题。试想如果一个集群中有3个节点,那么所有的客户端都与其中的单个节点node1建立TCP连接,那么node1的网络负载必然会大大增加而显得难以承受,其他节点又由于没有那么多的负载而造成硬件资源的浪费,所以负载...原创 2017-08-12 22:48:07 · 17289 阅读 · 1 评论 -
RabbitMQ消息追踪之rabbitmq_tracing
rabbitmq_tracing插件相当于Firehose的GUI版本,它同样能跟踪RabbitMQ中消息的流入流出情况。rabbitmq_tracing插件同样会对流入流出的消息做封装,然后将封装后的消息日志存入相应的trace文件之中。可以使用rabbitmq-plugins enable rabbitmq_tracing命令来启动rabbitmq_tracing插件。[root@...原创 2017-07-24 22:50:34 · 24417 阅读 · 2 评论 -
RabbitMQ之镜像队列
概述如果RabbitMQ集群只有一个broker节点,那么该节点的失效将导致整个服务临时性的不可用,并且可能会导致message的丢失(尤其是在非持久化message存储于非持久化queue中的时候)。当然可以将所有的publish的message都设置为持久化的,并且使用持久化的queue,但是这样仍然无法避免由于缓存导致的问题:因为message在发送之后和被写入磁盘并执行fsync之间存...原创 2017-05-02 19:39:56 · 29543 阅读 · 7 评论 -
[Conclusion]RabbitMQ-客户端源码之总结
RabbitMQ遵从的是AMQP协议,其broker端代码采用erlang编写,对于没有接触过erlang的同学(包括博主我)来说,想要了解其中的奥秘实在是不容易,大多只能从网上“搜刮”点散碎的知识点来充实一下。但是这样是不能究其然,更不能究其所以然。博主这里翻阅了amqp-client的java客户端的源码,通过其来学习下AMQP协议,进而更深刻的了解RabbitMQ. 注:如无特殊说明...原创 2017-04-17 19:19:18 · 6777 阅读 · 0 评论 -
[八]RabbitMQ-客户端源码之ChannelN
ChannelN是整个RabbitMQ客户端最核心的一个类了,其包含的功能点甚多,这里需要分类阐述。 首先来看看ChannelN的成员变量:private final Map<String, Consumer> _consumers = Collections.synchronizedMap(new HashMap<String, Consumer>());pr...原创 2017-04-17 19:11:02 · 6538 阅读 · 3 评论 -
[七]RabbitMQ-客户端源码之AMQPImpl+Method
AMQPImpl类包括AMQP接口(public class AMQImpl implements AMQP)主要囊括了AMQP协议中的通信帧的类别。这里以Connection.Start帧做一个例子。public static class Connection { public static final int INDEX = 10; public static c...原创 2017-04-17 19:07:22 · 2197 阅读 · 0 评论 -
[六]RabbitMQ-客户端源码之AMQCommand
AMQCommand是用来处理AMQ命令的,其包含了Method, Content Heaeder和Content Body. 下面是通过wireshark抓包的AMQP协议上图中的Basic.Publish命令就包含Method, Content header以及Content body。AMQCommand不是直接包含Method等成员变量的,而是通过CommandAssembl...原创 2017-04-17 19:02:04 · 2624 阅读 · 2 评论 -
[五]RabbitMQ-客户端源码之AMQChannel
AMQChannel是一个抽象类,是ChannelN的父类。其中包含唯一的抽象方法:/** * Protected API - called by nextCommand to check possibly handle an incoming Command before it is returned to the caller of nextCommand. If this meth...原创 2017-04-17 18:59:39 · 3396 阅读 · 0 评论 -
[四]RabbitMQ-客户端源码之Frame
Frame是指AMQP协议层面的通信帧(一个正式定义的连接数据包)。 我们来看下Frame类中的成员变量有哪些:/** Frame type code */public final int type;/** Frame channel number, 0-65535 */public final int channel;/** Frame payload bytes (for...原创 2017-04-17 18:57:27 · 3277 阅读 · 0 评论 -
[三]RabbitMQ-客户端源码之ChannelManager
关于ChannelManager,官方注解:Manages a set of channels, indexed by channel number (1.. _channelMax)。ChannelManager类的代码量不是很多,主要用来管理Channel的,channelNumber=0的除外,应为channelNumber=0是留给Connection的特殊的channelNumber...原创 2017-04-17 18:54:39 · 3147 阅读 · 0 评论 -
[二]RabbitMQ-客户端源码之AMQConnection
上一篇文章([一]RabbitMQ-客户端源码之ConnectionFactory)中阐述了conn.start()方法完成之后客户端就已经和broker建立了正常的连接,而这个Connection的关键就在于这个start()方法之内,下面我们来慢慢分析。首先来看看start()方法的源码,这个方法有点长,这里拆开来一一分析,首先是注释:/** * Start up the con...原创 2017-04-17 18:51:07 · 6951 阅读 · 1 评论 -
[一]RabbitMQ-客户端源码之ConnectionFactory
首先看一段amqp-client发送端的示例代码(展示出主要部分):ConnectionFactory factory = new ConnectionFactory();factory.setHost(ip);factory.setPort(5672);factory.setUsername("root");factory.setPassword("root");Connect...原创 2017-04-17 18:48:01 · 24337 阅读 · 4 评论 -
学会查看 RabbitMQ日志
如果在使用RabbitMQ的过程中出现了异常情况,通过翻阅RabbitMQ的服务日志可以让你在处理异常的过程中事半功倍。RabbitMQ日志中会有明确的事件日期、事件内容以及事件等级等。RabbitMQ的日志默认存放在$RABBITMQ_HOME/var/log/rabbitmq目录下。本问主要从RabbitMQ服务开启、RabbitMQ服务关闭以及RabbitMQ集群搭建的角度来举例说明Rabb...原创 2017-07-09 11:25:02 · 59295 阅读 · 2 评论 -
RabbitMQ消息追踪之Firehose
在使用任何消息中间件的过程中,难免会出现某条消息异常丢失的情况。对于RabbitMQ而言,可能是因为生产者或消费者与RabbitMQ断开了连接,而它们与RabbitMQ又采用了不同的确认机制;也有可能是因为交换器与队列之间不同的转发策略;甚至是交换器并没有与任何队列进行绑定,生产者又不感知或者没有采取相应的措施;另外RabbitMQ本身的集群策略也可能导致消息的丢失。这个时候就需要有一个较好的机制...原创 2017-07-24 22:17:35 · 6080 阅读 · 0 评论