RabbitMQ-Java客户端API指南-上

客户端API严格按照AMQP 0-9-1协议规范进行建模,并提供了易于使用的附加抽象。

RabbitMQ Java客户端使用com.rabbitmq.client作为其顶层包。关键的类和接口是:

  • Channel
  • Connection
  • ConnectionFactory
  • Consumer

协议操作可通过Channel接口获得。Connection用于打开通道,注册连接生命周期事件处理程序,并关闭不再需要的连接。 连接是通过ConnectionFactory实例化的,这就是你如何配置各种连接设置,如虚拟主机或用户名。

Connections和Channels

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;

连接到Broker

以下代码使用给定的参数(主机名,端口号等)连接到AMQP代理:

ConnectionFactory factory = new ConnectionFactory();
factory.setUsername(userName);
factory.setPassword(password);
factory.setVirtualHost(virtualHost);
factory.setHost(hostName);
factory.setPort(portNumber);
Connection conn = factory.newConnection();

所有这些参数都对本地运行的RabbitMQ服务器具有合理的默认值。

或者,可以使用URI:

ConnectionFactory factory = new ConnectionFactory();
factory.setUri("amqp://userName:password@hostName:portNumber/virtualHost");
Connection conn = factory.newConnection();

所有这些参数都对本地运行的RabbitMQ服务器有合理的默认值。

然后接口可以用于打开一个通道:

Channel channel = conn.createChannel();

现在可以使用该通道发送和接收消息,如后面的部分所述。

要断开连接,只需关闭通道和连接:

channel.close();
conn.close();

使用Exchanges和Queues

客户端应用程序与AMQP的高级构建块交换和排队。这些必须被“声明”才可以使用。声明任何一种类型的对象只是确保其中一个名称存在,如果有必要的话创建它。

继续前面的例子,下面的代码声明一个Exchange和一个Queue,然后将它们绑定在一起。

channel.exchangeDeclare(exchangeName, "direct", true);
String queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, exchangeName, routingKey);

这将主动声明以下对象,这两个对象都可以使用附加参数进行定制。这里他们都没有任何特别的论点。

  • 一个耐用,非自动删除“直接”类型的交换
  • 一个具有生成名称的非持久,独占,自动删除队列

上面的函数调用然后用给定的路由密钥将队列绑定到交换机上。

请注意,这将是一个典型的方式来声明一个队列,当只有一个客户端想要使用它:它不需要一个众所周知的名称,没有其他客户端可以使用它(独占),将自动清理(自动删除)。如果有几个客户想共享一个知名名字的队列,这个代码将是合适的:

channel.exchangeDeclare(exchangeName, "direct", true);
channel.queueDeclare(queueName, true, false, false, null);
channel.queueBind(queueName, exchangeName, routingKey);

这将主动宣布:

  • 一个耐用,非自动删除“直接”类型的交换
  • 一个具有众所周知名称的持久的,非排他性的非自动删除队列

请注意,所有这些Channel API方法都被重载。这些便捷的exchangeDeclare,queueDeclare和queueBind 使用合理的默认值。还有更多的参数更多的形式,让你根据需要重写这些默认值,在需要的地方给予完全控制。

这个“短形式,长形式”模式在整个客户端API使用。

RabbitMQ-Java客户端API指南-上的更多相关文章

  1. JAVA客户端API调用memcached两种方式

    1. memcached client for java客户端API:memcached client for java 引入jar包:java-memcached-2.6.2.jar package ...

  2. zookeeper的Java客户端API

    zookeeper作为一个分布式服务框架,主要用来解决分布式数据一致性问题,对多种语言提供了API.这里主要记录下JAVA客户端API的使用. 1.创建会话 客户端可以通过创建一个ZooKeeper实 ...

  3. RabbitMQ-Java客户端API指南-下

    RabbitMQ-Java客户端API指南-下 使用主机列表 可以将Address数组传递给newConnection().的地址是简单地在一个方便的类com.rabbitmq.client包与主机 ...

  4. Zookeeper的java客户端API使用方法(五)

    前面几篇博文,我们简单的介绍了一下zookeeper,如何安装zookeeper集群,以及如何使用命令行等.这篇博文我们重点来看下Zookeeper的java客户端API使用方式. 创建会话 客户端可 ...

  5. java客户端文件的上传和下载

    java客户端文件的上传和下载 //上传 public JTable upload(String id){ JTable table=new JTable(); System.out.println( ...

  6. hadoop系列二:HDFS文件系统的命令及JAVA客户端API

    转载请在页首明显处注明作者与出处 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6 ...

  7. [RabbitMQ]Java客户端:源码概览

    本文简要介绍RabbitMQ提供的Java客户端中最基本的功能性接口/类及相关源码. Mavan依赖: <dependency> <groupId>com.rabbitmq&l ...

  8. java 客户端链接不上redis解决方案

    原文地址:http://blog.csdn.net/yingxiake/article/details/51472810 出现问题描述: 1.Could not get a resource from ...

  9. java客户端调用ftp上传下载文件

    1:java客户端上传,下载文件. package com.li.utils; import java.io.File; import java.io.FileInputStream; import ...

随机推荐

  1. Linux - bashrc之alias

    1. cd ~ 2. touch .bashrc // 若该文件不存在的话 3. vim .bashrc ----------------复制粘贴如下文本--------------- # alias ...

  2. 中通快递股份有限公司.net高级面试题

    中通快递分布式技术开发   gc垃圾回收原理 .net中,托管代码的内存管理是自动的,由GC进行管理,而对于非托管代码,则需要.net手动处理 CLR运行时,内存分为:托管堆和栈,其中栈用于存储值类型 ...

  3. php 人人商城 生成 临时微信二维码,并保存成海报图片 有效期一个月

    public function getPoster(){ global $_W; global $_GPC; $mm = pdo_fetch('select nickname,codetime fro ...

  4. 提高mysql性能(like搜索替换 )

    一 .mysql用find_in_set代替like搜索提高性能 SELECT * from mobantestinfo1 where find_in_set('33',info2); 二 .使用内部 ...

  5. 【Sklearn系列】使用Sklearn进行数据预处理

    这篇文章主要讲解使用Sklearn进行数据预处理,我们使用Kaggle中泰坦尼克号事件的数据作为样本. 读取数据并创建数据表格,查看数据相关信息 import pandas as pd import ...

  6. python面向对象(进阶篇)

    本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员: 类的成员可以分为三大类:字段(变量).方法.属性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对 ...

  7. android 事件拦截 (Viewpager不可以左右滑动)

    以前没有做过真正的需求,所以从来没有觉得事件拦截分发处理有什么好懂的. 现在做需求了,真的是什么需求都有,你作为开发都要去研究实现.比如说,只能点不能滑动的viewpager.其实这都可以不用view ...

  8. HNOI2018 摸鱼记

    HNOI2018 摸鱼记 今天我又来记流水账啦 Day 0 颓废的一天. 我,球爷和杜教在颓膜膜.io ych看起来在搓碧蓝 鬼知道哥达鸭干了什么 学习氛围只局限在机房的一角 后来全体Oier开会,5 ...

  9. 如何使用malloc申请一个二位数组

    fscanf(file, "%d", &iVertexNum); // Read number of Vertices double **G = (double **)ma ...

  10. Asp.net Core发布到CentOS7

    第一步.安装CentOS 官网https://www.centos.org/下载CentOS,下载地址https://www.centos.org/download/,我选的“DVD ISO”,然后虚 ...