Rabbitmq

rabbitmq是一个消息通信的开源工具。本文自问自答,回答一些使用和理解上的难点。
提出大概10个左右的问题,

1.Connection和Channel的区别?

程序要使用rabbitmq,要先创建一个到rabbitmq的连接,指定ip,端口,vhost,验证用户和密码,以及相关的设置,比如timeout时间、心跳时间,以及最大的channel数目。

连接,对于RabbitMQ而言,其实就是一个位于客户端和Broker之间的TCP连接。

那么channel是什么呢?

信道,仅仅创建了客户端到Broker之间的连接后,客户端还是不能发送消息的。需要为每一个Connection创建Channel,AMQP协议规定只有通过Channel才能执行AMQP的命令。一个Connection可以包含多个Channel。之所以需要Channel,是因为TCP连接的建立和释放都是十分昂贵的,如果一个客户端每一个线程都需要与Broker交互,如果每一个线程都建立一个TCP连接,暂且不考虑TCP连接是否浪费,就算操作系统也无法承受每秒建立如此多的TCP连接。RabbitMQ建议客户端线程之间不要共用Channel,至少要保证共用Channel的线程发送消息必须是串行的,但是建议尽量共用Connection。

channel已经和qos,ack,nack,messageCount,以及consumer count等概念关联到一起了。。

比如说declare一个队列,Actively declare a server-named or named queue using queue.declare AMQP method.

原理是用的APQP提供的方式。

2.默认的exchange和可编程的amqp?

比如说发送publish(对应的amqp的命令是basicPublish)一个消息,一般涉及到下面这些概念,参数有channel,exchange,routing-key,payload(包括headers和body),和opts(比如content-type和content-encoding等)

[^Channel channel ^String exchange ^String routing-key payload
{:keys [^Boolean mandatory ^String content-type ^String ^String content-encoding ^Map headers
        ^Boolean persistent ^Integer priority ^String correlation-id ^String reply-to ^String expiration ^String message-id
        ^Date timestamp ^String type ^String user-id ^String app-id ^String cluster-id]
 :or {mandatory false}}]

当content-type为”application/json”的时候,服务端如果支持json格式,那么数据的解析就会非常友好。

amqp主要是一些概念的理解:

  1. AMQP模型(AMQP Model):一个由关键实体和语义表示的逻辑框架,遵从AMQP规范的服务器必须提供这些实体和语义。为了实现本规范中定义的语义,客户端可以发送命令来控制AMQP服务器。
  2. 连接(Connection):一个网络连接,比如TCP/IP套接字连接。
  3. 会话(Session):端点之间的命名对话。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值