RabbitMQ Java 客户端 - Java 依赖项(标准库?)

Posted

技术标签:

【中文标题】RabbitMQ Java 客户端 - Java 依赖项(标准库?)【英文标题】:RabbitMQ Java Client - Java Dependencies (standard libraries?) 【发布时间】:2013-10-16 15:00:22 【问题描述】:

我需要将 RabbitMQ 与另一个在 Java 上运行的系统集成。所以我去了official website,下载了这个包并将它复制到我的类路径中。然后我跟着basic tutorial,我验证了导入外部库的工作。

我现在面临的问题对于 Java 开发人员来说可能很容易解决:我必须导入哪些标准 Java 库才能使以下代码工作?

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.ConnectionFactory;
...
ConnectionFactory factory = new ConnectionFactory();

不会遇到这样的导入错误:

Line 51, Column 18: No applicable constructor/method found for actual parameters "java.lang.String"; 
candidates are: "void com.rabbitmq.client.ConnectionFactory.setPort(int)"

我尝试过这样的事情,但我不知道它在 Java 中是如何工作的,所以我想澄清一下。例如,什么时候应该使用星号?

import java.lang.String;
import java.lang.String.*;

顺便说一下,我尝试集成 RabbitMQ 的系统是 Pentaho Data Integration(又名 Kettle)。

【问题讨论】:

【参考方案1】:

首先,删除您的 java.lang 导入。

其次,使用int 而不是String 调用setPort,如API 中所述。

【讨论】:

【参考方案2】:

只在类路径中包含 amqp-client-$version jar 就足够了。 Astreix 用于从包中导入所有类。 java中的类名以大写字母开头,而包名则以小写字母开头。所以,java.lang 是一个包,而 String 是一个类。默认情况下,java.lang 包的所有类都导入到 Java 程序中,无需编写import java.lang.String; or import java.lang.*;

【讨论】:

你的意思是我应该在“rabbitmq-client.jar”(版本 3.1.5)之外添加它吗?当我阅读 [网站] (rabbitmq.com/java-client.html) 时,我认为它已包含在内。顺便说一句,我很确定“rabbitmq-client.jar”在类路径中,因为如果我把它拿出来,我会得到一个不同的错误:无法加载导入的类“com.rabbitmq.client.Connection” .

以上是关于RabbitMQ Java 客户端 - Java 依赖项(标准库?)的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ Java 客户端 - Java 依赖项(标准库?)

RabbitMQ/JAVA 客户端测试(补:利用线程)

用于Rabbitmq Stomp的java websocket客户端

java rabbitmq 客户端在失去连接后怎么自动恢复

使用 rabbitmq 客户端 Java API 保证交付

从 Java 客户端中的多个 RabbitMQ 交换中读取,没有轮询