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:当没有任何消费者使用时,自动删除该队列

rabbitmq channel对象的方法相关推荐

  1. RabbitMQ详解(使用方法步骤详细)

    1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应. 异步通讯:就像发邮件,不需要马上回复. 两种方式各有优劣,打电话可以立即得到响应,但是你 ...

  2. OpenCV【零】—————cv::Mat——Mat对象创建方法

    OpenCV (一)--Mat对象创建方法 目录 OpenCV (一)--Mat对象创建方法 1. cv::Mat优点及原理(本质类) 2. Mat类拷贝及对象的创建方法 3. Mat 对象元素的高效 ...

  3. Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP

    Xposed Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子: public class WebViewHook implements IXposedH ...

  4. C#对象数组排序方法

    一个排序的类,用了几种方式实现的. using System;    namespace DataStruct {    public class Sorter    { /// <summar ...

  5. selenium提取数据之driver对象定位标签元素获取标签对象的方法

    selenium提取数据之driver对象定位标签元素获取标签对象的方法 在selenium中可以通过多种方式来定位标签,返回标签元素对象 find_element_by_id (返回一个元素) fi ...

  6. python类、对象、方法、属性之类与对象笔记

    为什么80%的码农都做不了架构师?>>>    python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... ...

  7. java字符串转json取集合_Java中Json字符串直接转换为对象的方法(包括多层List集合)...

    使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...

  8. Java对象查询方法:Jxpath(转译)

    Java对象查询方法:Jxpath(转译) 在JAVA对象中,如何进行有效的查询呢,这一直是个很值得探讨的问题.大家知道,在XML中,要找元素如何找呢?没错,通过XPATH 是个不错的办法,同样道理, ...

  9. Activity传递对象的方法

    //Serializeable传递对象的方法 public void SerializeMethod(){ Person mPerson = new Person(); mPerson.setName ...

最新文章

  1. [基础]Linux文件说明
  2. Spring Boot配置IDEA无法创建Spring Initializr项目
  3. 正则提取编码解码问题
  4. Android Lifecycle 生命周期组件详解
  5. 你真的了解JAVA的形参和实参吗?
  6. sql 缓冲池_监视SQL Server中的内存文员和缓冲池分配
  7. 使用Liquid实现简单的数据交换
  8. 贪吃蛇程序设计报告python_贪吃蛇程序设计报告
  9. 【甄选素材】80棵EVERMOTION2.5维树 附使用教程
  10. 使用记账软件 记录日常收支并将数据导出表格保存
  11. 自己搭建微信小程序服务器,微信小程序搭建自己的Https服务器
  12. 快速JD获取eid和fp
  13. Adb connection Error:远程主机强迫关闭了一个现有的连接。
  14. 阿里天池工业蒸汽量预测baseline-数据探索篇
  15. 什么是ACL访问控制列表?它们的匹配机制是什么?
  16. Selenium使用中的SSL错误
  17. 计算机网络——(5)网络操作系统
  18. C#chart绘折线图动态添加数据
  19. latex插入参考文献小技巧
  20. 为什么我中签的不是股票,都是转债?

热门文章

  1. Leetcode每日一题:1248.count-number-of-nice-subarrays(统计[优美子数组])
  2. Leetcode每日一题:189.rotate-array(旋转数组)
  3. Linux编程(6)_makefile
  4. Keil5配置GCC编译器编译STM32工程
  5. 转载:linux驱动层到应用层的重要接口sys文件系统---/sys目录详解
  6. 自动化测试学习之路--json、dom编程
  7. android studio grandle错误,flutter android studio构建失败
  8. 第12章[12.4] 鼠标移入移除时弹出和关闭窗口
  9. [Android系列—] 2. Android 项目目录结构与用户界面的创建
  10. c语言 调用父类方法,关于C++:如何从派生类函数调用父类函数?