AMQP

AMQP协议是一个高级抽象层消息通信协议,RabbitMQ是AMQP协议的实现。

基础概念快速入门

每个rabbitmq-server叫做一个Broker,等着tcp连接进入。

在rabbitmq-server进程内有Exchange,定义了这个消息的发送类型。(一对多、直连、多对多等等)

Queue是进程内的逻辑队列,有多个,有名字。

Binding联系Exchane与Queue。

Routing key由生产者指定。Binding key由消费者指定。二者联合决定一条消息的来去。

java client api

连接

ConnectionFactory factory = new ConnectionFactory();

factory.setHost(hostName);

Connection conn = factory.newConnection();

Channel channel = conn.createChannel();

以上是得到一个rabbitmq连接最最基础的代码,当然了,还可以设置一些诸如用户名密码的事情。

最后这个channel就可以用来收和发消息了。

消息者线程池

ExecutorService es = Executors.newFixedThreadPool(20);

Connection conn = factory.newConnection(es);

消费者时使用,上述自动开了一20个线程的池来搞。

地址数组

Address[] addrArr = new Address[]{ new Address(hostname1, portnumber1)

, new Address(hostname2, portnumber2)};

Connection conn = factory.newConnection(addrArr);

上述代码如果连hostname1失败了就去hostname2。

factory.newConnection()会触发这个检测。

声明exchange与queue

channel.exchangeDeclare(exchangeName, "direct", true);

String queueName = channel.queueDeclare().getQueue();

channel.queueBind(queueName, exchangeName, routingKey);

channel.exchangeDeclare 参数有 交换机名字  类型  是否持久化  不使用时是否自动删除 是否是内部的(不能被客户端使用) 其他参数

channel.queueDeclare 参数有 queue名字 是否持久化 独占的queue(仅供此连接) 不使用时是否自动删除 其他参数

channel.queueBind 参数有 queue名字 交换机名字 此次绑定使用的路由关键字  其他参数

发出消息

byte[] messageBodyBytes = "Hello, world!".getBytes();

channel.basicPublish(exchangeName, routingKey, null, messageBodyBytes);

channel.basicPublish 参数有 要发出的交换机名字  路由关键字 是否强制(设置为true时,找不到收的人时可以通过returnListener返回)  是否立即(其实rabbitmq不支持) 其他属性 消息主体

线程安全

Channel是线程好全的,但是最好是每个线程里用自己的Channel,因为在单个Channel里排队是有可能慢一些的。

最简单的办法消费消息

boolean autoAck = false;

channel.basicConsume(queueName, autoAck, "myConsumerTag",

new DefaultConsumer(channel) {

@Override

public void handleDelivery(String consumerTag,

Envelope envelope,

AMQP.BasicProperties properties,

byte[] body) throws IOException {

String routingKey = envelope.getRoutingKey();

String contentType = properties.contentType;

long deliveryTag = envelope.getDeliveryTag();

// (process the message components here ...)

channel.basicAck(deliveryTag, false);

}

});

一个Channel一个Consumer。

channel.basicAck 回发ACK 参数 tag 是否多个。

零碎

channel.basicQos 指定服务质量设置 参数 最大的投送字节数  最大的投送消息数量  设置是否要应用到整个channel(而不是一个消费者)。

factory.setAutomaticRecoveryEnabled(true) 网络有问题时,好后可自动恢复设置。

cf.setRequestedHeartbeat(5) 设置心跳时间。

exchange type可用的值:direct topic headers fanout。

exchange的类型有一个default,basicPublish没有指定时使用,而且,如果routingKey在指定绑定的时候,会去到绑定的exchange。

channel.queueDeclare().getQueue() 得到的是一个随机queue,断开连接后即删除。

当exchange为direct的时候routingKey与bindingKey必须完全一致才能消费消息。

mq 接口 java_Rabbitmq Java Client Api详解相关推荐

  1. Memcached Java Client API详解

    针对Memcached官方网站提供的java_memcached-release_2.0.1版本进行阅读分析,Memcached Java客户端lib库主要提供的调用类是SockIOPool和MemC ...

  2. java nio详解,Java NIO API详解

    Java NIO API详解 在JDK 1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API.对于大多数应用来说,这样的API使用很方 便,然而,一些对 ...

  3. JAVA EXCEL API详解

    2019独角兽企业重金招聘Python工程师标准>>> 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易 ...

  4. Java包装类API详解

    在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需要把字符串数据,根据需求转换成指定的基本数据类型,如年龄需要转换成int类型,考试成绩需要转换成double类 ...

  5. Java Validation Api 详解

    说明: 在我们应用程序的业务逻辑中,经常会碰到参数校验的情况,手动的在代码层上面进行校验就会带来很不好的体验,阅读.维护的成本会大大增加,造成冗余.因此有了这个JSR 303. Bean Valida ...

  6. Java 11中的新功能和API详解系列1

    Java 11中的新功能和API详解系列1 2018.9.27 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. JDK 11在语言语法方面有一个小改动,增加了相当数量的新API,以及 ...

  7. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java 8引入 ...

  8. Java 8 Stream API详解

    Java 8 Stream API详解 一.Stream API介绍 Java 8引入了全新的Stream API,此Stream与Java I/O包里的InputStream和OutputStrea ...

  9. 4.6 W 字总结!Java 11—Java 17特性详解

    作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...

最新文章

  1. Linux TCP/IP协议栈笔记
  2. 虚拟化--图解交互式方式安装ESXi_5.0的过程
  3. PHP array_combine
  4. linux删文件进程叫什么,Linux find 查找 并删除文件 杀掉进程
  5. 迁移pg_PG奥斯卡!云数据库专属集群MyBase荣获2020 PG亚洲大会“年度最佳产品奖”...
  6. The credentials you provided during SQL Server 2008 install are invalid
  7. 2018.12.11——全局变量与局部变量
  8. AI 智能会议系统(36)---AI 书单
  9. 浏览器中打开IOS应用并传参
  10. Mysql 高负载排查思路
  11. alpha and beta in statistics
  12. android webview 慢,Android Webview的性能问题
  13. 【推理加速】博客翻译:利用融合conv和bn的方法加速模型
  14. 第十二章(项目采购管理)知识点
  15. Win32DiskImager写入U盘容量变小 提示格式化
  16. KGB知识图谱凭借OCR文字识别突破文档解析局限
  17. 分享湖南软大自动健康打卡思路
  18. Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 15
  19. python生成单位矩阵_python 实现一个反向单位矩阵示例
  20. js特效之腾讯视频的图片轮播

热门文章

  1. windows2003sp2安装sql2005出错解决方法
  2. 借助Ant工具,实现快速开发
  3. 网管和***都必须知道的命令
  4. eleNuxt 打包到服务器上
  5. DEDE如何调用指定文章ID来调用特定文档
  6. DDoS攻击的大量增加给企业带来了新的威胁——Vecloud
  7. Android Studio上手,基于VideoView的本地文件及流媒体播放器
  8. 在Apache上搭建pywebsocket提供html5的websocket服务
  9. es6模块与 commonJS规范的区别
  10. 视图view没有主键,但可以添加唯一索引