mq 接口 java_Rabbitmq Java Client Api详解
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详解相关推荐
- Memcached Java Client API详解
针对Memcached官方网站提供的java_memcached-release_2.0.1版本进行阅读分析,Memcached Java客户端lib库主要提供的调用类是SockIOPool和MemC ...
- java nio详解,Java NIO API详解
Java NIO API详解 在JDK 1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API.对于大多数应用来说,这样的API使用很方 便,然而,一些对 ...
- JAVA EXCEL API详解
2019独角兽企业重金招聘Python工程师标准>>> 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易 ...
- Java包装类API详解
在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需要把字符串数据,根据需求转换成指定的基本数据类型,如年龄需要转换成int类型,考试成绩需要转换成double类 ...
- Java Validation Api 详解
说明: 在我们应用程序的业务逻辑中,经常会碰到参数校验的情况,手动的在代码层上面进行校验就会带来很不好的体验,阅读.维护的成本会大大增加,造成冗余.因此有了这个JSR 303. Bean Valida ...
- Java 11中的新功能和API详解系列1
Java 11中的新功能和API详解系列1 2018.9.27 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. JDK 11在语言语法方面有一个小改动,增加了相当数量的新API,以及 ...
- Java 8 Stream API详解--转
原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java 8引入 ...
- Java 8 Stream API详解
Java 8 Stream API详解 一.Stream API介绍 Java 8引入了全新的Stream API,此Stream与Java I/O包里的InputStream和OutputStrea ...
- 4.6 W 字总结!Java 11—Java 17特性详解
作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...
最新文章
- Linux TCP/IP协议栈笔记
- 虚拟化--图解交互式方式安装ESXi_5.0的过程
- PHP array_combine
- linux删文件进程叫什么,Linux find 查找 并删除文件 杀掉进程
- 迁移pg_PG奥斯卡!云数据库专属集群MyBase荣获2020 PG亚洲大会“年度最佳产品奖”...
- The credentials you provided during SQL Server 2008 install are invalid
- 2018.12.11——全局变量与局部变量
- AI 智能会议系统(36)---AI 书单
- 浏览器中打开IOS应用并传参
- Mysql 高负载排查思路
- alpha and beta in statistics
- android webview 慢,Android Webview的性能问题
- 【推理加速】博客翻译:利用融合conv和bn的方法加速模型
- 第十二章(项目采购管理)知识点
- Win32DiskImager写入U盘容量变小 提示格式化
- KGB知识图谱凭借OCR文字识别突破文档解析局限
- 分享湖南软大自动健康打卡思路
- Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 15
- python生成单位矩阵_python 实现一个反向单位矩阵示例
- js特效之腾讯视频的图片轮播