rabbitmq channel

Connection

连接,与rabbitmq server建立的一个连接,由ConnectionFactory创建,虽然创建时指定 了多个server address,但每个connection只与一个物理的server进行连接,此连接是基于Socket进行连接的,这个可以相似的理解为像一个DB Connection。

Channel

建立在connection基础上的一个通道,相对于connection来说,它是轻量级的。可以这样理解,它就像是hibernate里面的session一样,相对于DB Connection来说,session就是一个轻量级的东西。

Channel channel = conn.createChannel();

注:尽量避免在多线程中使用一个channel,Channel javadoc有如下说明:

While a Channel can be used by multiple threads, it‘s important to ensure that only one thread executes a command at once. Concurrent execution of commands will likely cause an UnexpectedFrameError to be thrown.

另官方Java Client API Guide里面也同样提到

Channel thread-safety

In general, Channel instances should not be used by more than one thread simultaneously: application code should maintain a clear notion of thread ownership for Channel instances. If more than one thread needs to access a particular Channel instance, the application should enforce mutual exclusion itself, for example by synchronising on the Channel.

Symptoms of incorrect serialisation of Channel operations include, but are not limited to, de>IllegalStateExceptionde>s with the message "cannot execute more than one synchronous AMQP command at a time", and de>UnexpectedFrameErrorde>s.

参考文章如下:

rabbitmq 学习-6-rabbitmq基础

由于客户端需要从服务器获取方法,所以它需要在其生存期内一直保持连接的开放状态。这意味着连接可能会持续较长时间;几小时,几天或者几周。不管对客户端还是服务器来说,保持这些连接是很耗费资源的。为了在不使用大量的物理TCP/IP连接的情况下就能拥有大量的逻辑连接,AMQP使用了‘通道(channel)’ 的概念(在其Java and .NET客户端的IModel接口中有较为模糊的描述)。你可以在单个连接中创建多个channel,相对来说创建和销毁它们的代价要小的多。

在storm的spout中,要特别注意创建channel,不要乱用!

参考文章如下:

RabbitMQ: AMQP Channel 最佳实践

时间: 2024-10-29 17:22:30

rabbitmq channel的相关文章

rabbitmq channel参数详解

1.Channel 1.1 channel.exchangeDeclare(): type:有direct.fanout.topic三种durable:true.false true:服务器重启会保留下来Exchange.警告:仅设置此选项,不代表消息持久化.即不保证重启后消息还在.原文:true if we are declaring a durable exchange (the exchange will survive a server restart)autoDelete:true.f

没有连接的AMQP / RabbitMQ通道何时死亡?(when does an AMQP/RabbitMQ channel with no connections die?)

I have a simple RabbitMQ test program randomly enqueuing messages, and another reading them, all using Spring-AMQP. If the consumer dies (for example killing a process without having a chance to close its connection or channel), any messages that it

杂项之rabbitmq

杂项之rabbitmq 本节内容 rabbitmq简介 AMQP协议 rabbitmq使用 应用举例 rabbitmq简介 介绍rabbitmq之前,先介绍一下AMQP协议,因为rabbitmq就是基于AMQP协议实现的一个服务程序.(目前为止应该也是唯一实现了AMQP协议的服务) AMQP(高级消息队列协议)是一个网络协议.它支持符合要求的客户端应用(application)和消息中间件代理(messaging middleware broker)之间进行通信. arbbitmq使用erlan

Python开发【第十篇】:RabbitMQ队列

简介 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消息队列协议)的标准实现. 安装 首先安装erlang环境. 官网:http://www.erlang.org/ Windows版下载地址:http://erlang.org/download/otp_win64_20.0.exe Linux版:yum安装 Windows安装步骤 第一步运行 第二步 第三步 第四步 第五步 Erlang安装完成. 然后安装RabbitMQ,首先下载Rabbit

rabbitMQ实战(一)---------使用pika库实现hello world

rabbitMQ实战(一)---------使用pika库实现hello world 2016-05-18 23:29 本站整理 浏览(267) pika是RabbitMQ团队编写的官方Python AMQP库.需要先安装pika:pip3 install pika有较详细的注释,就不再详细说明了生产者代码:hello_world_producer.py: import pika,sys #connect to the rabbitmq,use the default vhost credent

RabbitMQ 通过记日志来看routingkey

RoutingKey 每个项目都需要记录日志,日志则一般会分为多种级别,常见的是 Info.debug.warn.Error 对于前三种日志,在项目运行中会产生大量的消息,但是一般多数情况下是不会用到的即时性不高,而error则不同,对于error级别的消息需要迅速通知开发人员去修改项目中的错误 使用RabbitMq应该怎么设计? 可以分析一下 首先我们需要一个exchange,对于即时性不高的日志速度慢一些是没有关系的,所以可以把它们放到一个队列中,而针对error级别即时性较高的需要放到一个

RabbitMQ Queue分发多个Consumer

RabbitMQ Queue分发多个Consumer 多个Consumer的消息分发 之前讲过一个queue对应一个consumer的小例子, 但是在实际项目中,一个consumer肯定是不够的,queue中的消息过多.一个consumer明显会处理过慢,等待时间过长.这时候就需要多个consumer来缓解压力. 消息发布端 无论是创建connection还是创建channel与之前的步骤都是一样的,在上面我们使用的是默认的交换机.在这里可以自己声明一个交换机 这里是与上个例子不同的地方,创建了

RabbitMQ代码第一步

RabbitMQ代码第一步 Hello RabbitMQ 终于到了使用.Net连接RabbitMQ的时候了,我们首先新建一个控制台应用程序,在程序包管理控制器中NuGet中下载 RabbitMQ. Install-Package RabbitMQ.Client 安装完成后,就可以着手做一个RabbitMQ的消息发布程序了.首先 using RabbitMQ.Client; 从工厂中拿到实例, 这里的User不建议使用guest,因为guest被设置了回环,也就是仅在本地可以被登陆,在其它的机器在

golang rabbitmq实践 (二 实现简单的消息收发)

1:驱动 本来打算自己写一个驱动的,后来发现github上面已经有了,那我就直接拿现成的了, 驱动采用 github.com/streadway/amqp ,直接import就可以啦! 2:exchange and queue 在上一篇文章中,我们已经创建好virtualhost .exchange and queue,所以我们先定义这些常量 const ( queueName = "push.msg.q" exchange = "t.msg.ex" mqurl =