zoukankan      html  css  js  c++  java
  • rabbit channel参数

    channel.exchangeDeclare()

    channel.ExchangeDeclare(string exchange: "cjlTest",string  type: "direct/topic/header/fanout",bool  durable: true);

    参数解析:

    exchange:名称

    type:有fanout、direct、topic、header;选择合适自己的

    durable:是否开启持久化exchange

    autoDelete: 当已经没有消费者时,服务器是否可以删除该exchange

    fanout

        fanout类型的Exchange路由规则非常简单,它会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中。 

        

          上图中,生产者(P)发送到Exchange(X)的所有消息都会路由到图中的两个Queue,并最终被两个消费者(C1与C2)消费。

       direct

          direct类型的Exchange路由规则也很简单,它会把消息路由到那些binding key与routing key完全匹配的Queue中。

          

          以上图的配置为例,以routingKey=”error”发送消息到Exchange,则消息会路由到Queue1(amqp.gen-S9b…,这是由RabbitMQ自动生成的Queue名称)和Queue2(amqp.gen-Agl…);如果我们以routingKey=”info”或routingKey=”warning”来发送消息,则消息只会路由到Queue2。如果我们以其他routingKey发送消息,则消息不会路由到这两个Queue中。

        topic

         前面讲到direct类型的Exchange路由规则是完全匹配binding key与routing key,但这种严格的匹配方式在很多情况下不能满足实际业务需求。

         topic类型的Exchange在匹配规则上进行了扩展,它与direct类型的Exchage相似,也是将消息路由到binding key与routing key相匹配的Queue中,但这里的匹配规则有些不同,它约定:  

    • routing key为一个句点号“. ”分隔的字符串(我们将被句点号“. ”分隔开的每一段独立的字符串称为一个单词),如“stock.usd.nyse”、“nyse.vmw”、“quick.orange.rabbit”
    • binding key与routing key一样也是句点号“. ”分隔的字符串
    • binding key中可以存在两种特殊字符“*”与“#”,用于做模糊匹配,其中“*”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)

      以上图中的配置为例,routingKey=”quick.orange.rabbit”的消息会同时路由到Q1与Q2,routingKey=”lazy.orange.fox”的消息会路由到Q1,routingKey=”lazy.brown.fox”的消息会路由到Q2,routingKey=”lazy.pink.rabbit”的消息会路由到Q2(只会投递给Q2一次,虽然这个routingKey与Q2的两个bindingKey都匹配);

      routingKey=”quick.brown.fox”、routingKey=”orange”、routingKey=”quick.orange.male.rabbit”的消息将会被丢弃,因为它们没有匹配任何bindingKey。

        header

          headers类型的Exchange不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。 该类型exchange不太常用

    chanel.basicQos()

    channel.basicQos(int prefetchSize, int prefetchCount, boolean global) throws IOException;

    参数解析:

      prefetchSize:消息的大小

      prefetchCount:会告诉RabbitMQ不要同时给一个消费者推送多于N个消息,即一旦有N个消息还没有ack,则该consumer将block掉,直到有消息ack

      global:是否将上面设置应用于channel,简单点说,就是上面限制是channel级别的还是consumer级别

    channel.basicPublish()

    void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body)
                throws IOException;
    参数解析:
      exchange:名称
      routingKey:路由键,#匹配0个或多个单词,*匹配一个单词,在topic exchange做消息转发用
      mandatory:为true时如果exchange根据自身类型和消息routeKey无法找到一个符合条件的queue,那么会调用basic.return方法将消息返还给生产者。
              为false时出现上述情形broker会直接将消息扔掉
      immediate:为true时如果exchange在将消息route到queue(s)时发现对应的queue上没有消费者,那么这条消息不会放入队列中。当与消息routeKey关联的所有queue(一个或多个)都没有消费者时,该消息会通过basic.return方法返还给生产者。
      props:需要注意的是BasicProperties.deliveryMode,1:不持久化 2:持久化 这里指的是消息的持久化,配合channel(durable=true),queue(durable)可以实现,即使服务器宕机,消息仍然保留
      body:要发送的信息

    channel.basicAck()

    void basicAck(long deliveryTag, boolean multiple) throws IOException;
    参数解析
      deliveryTag:该消息的index
      multiple:是否批量处理.true:将一次性ack所有小于deliveryTag的消息。

    channel.basicNack()

    void basicNack(long deliveryTag, boolean multiple, boolean requeue)
                throws IOException;
    参数解析
    deliveryTag:该消息的index
    multiple:是否批量.true:将一次性拒绝所有小于deliveryTag的消息。
    requeue:被拒绝的是否重新入队列

    channel.basicReject()

    void basicReject(long deliveryTag, boolean requeue) throws IOException;
    参数解析
    deliveryTag:该消息的index
    requeue:被拒绝的是否重新入队列
    channel.basicNack 与 channel.basicReject 的区别在于basicNack可以拒绝多条消息,而basicReject一次只能拒绝一条消息
    
    

    channel.basicConsume() 

    String basicConsume(String queue, boolean autoAck, Consumer callback) throws IOException;

    参数解析
    queue:队列名称
    autoAck:
    是否自动ack,如果不自动ack,需要使用channel.ack、channel.nack、channel.basicReject 进行消息应答callback:回调函数,一个事件

    chanel.exchangeBind()

    用于通过绑定bindingkey讲queue到exchange,之后便可以进行消息接收

    Exchange.BindOk exchangeBind(String destination, String source, String routingKey) throws IOException;

    channel.queueDeclare()

    Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,
                                     Map<String, Object> arguments) throws IOException;
    durable:true、false true:在服务器重启时,能够存活
    exclusive :是否为当前连接的专用队列,在连接断开后,会自动删除该队列,生产环境中应该很少用到吧。
    autodelete:当没有任何消费者使用时,自动删除该队列
     
  • 相关阅读:
    学英语舌尖效应(转)
    winform程序防止重复运行
    label字符自动换行(转自网络)
    C# WINFORM中的combobox.items.add实现像web开发那样,添加显示内容text和实际value值
    三极管开关电路设计(转)
    ASPNET+ArcGIS+Flex初次使用笔记
    转:oracle日期函数集锦
    网站开发人员应该知道的62件事
    cassandra的安装与使用
    datejs一个很好用的时间日期JavaScript组件
  • 原文地址:https://www.cnblogs.com/cuijl/p/8075130.html
Copyright © 2011-2022 走看看