【问题标题】:Running RabbitMQ java client运行 RabbitMQ java 客户端
【发布时间】:2016-12-02 13:14:44
【问题描述】:

我想创建一个 RabbitMQ java 客户端。我创建了一个这样的 Maven 项目:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=rabbitmq-test -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

在我添加的 pom.xml 文件中(如他们的网站所述)

<dependency>
  <groupId>com.rabbitmq</groupId>
  <artifactId>amqp-client</artifactId>
  <version>4.0.0</version>
</dependency>

在我写的单个主文件中:

package com.mycompany.app;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;


/**
 * Hello world!
 *
 */
public class App
{
        public static void main( String[] args ) throws java.util.concurrent.TimeoutException, java.io.IOException {

                ConnectionFactory factory = new ConnectionFactory();
                factory.setHost("localhost");
                Connection connection = factory.newConnection();
                Channel channel = connection.createChannel();
        }
}

在我运行的代码中没有 RabbitMQ 的东西

mvn package
java -cp target/rabbitmq-test-1.0-SNAPSHOT.jar com.mycompany.app.App

并且代码运行良好。 如果我包含导入和 RabitMQ 代码,那么如果我像之前一样运行

Exception in thread "main" java.lang.NoClassDefFoundError: com/rabbitmq/client/ConnectionFactory
    at com.mycompany.app.App.main(App.java:17)

这基本上意味着“找不到 RabitMQ jar”对吗? 但是在我第一次运行mvn package 时,maven 在某处下载了 amqp-client-4.0.0.jar。那么如何将这个 jar 也添加到运行中呢?

我尝试自己下载这个 jar,当我这样运行时:

java -cp target/rabbitmq-test-1.0-SNAPSHOT.jar:target/amqp-client-4.0.0.jar:. com.mycompany.app.App 

我明白了:

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 

所以我下载了这个jar,当我这样运行时:

java -cp target/rabbitmq-test-1.0-SNAPSHOT.jar:target/amqp-client-4.0.0.jar:target/slf4j-api-1.7.21.jar:. com.mycompany.app.App

我明白了:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

我加了

<dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.21</version>
</dependency>

但还是一样... 所以有什么问题?除了我对java一无所知?

编辑: 在我看到的 RabbitMQ 日志中:

=INFO REPORT==== 2-Dec-2016::15:18:18 ===
accepting AMQP connection <0.1713.0> (127.0.0.1:55976 -> 127.0.0.1:5672)

当我收到 staticLoggerBinder 错误时。那么这是什么意思呢?发生什么事了?

【问题讨论】:

  • 当你执行你的主类时,你需要在类路径中拥有你的代码使用的所有 JARs
  • @LutzHorn 是的,但是这里缺少的罐子是什么?
  • 包含org.slf4j.impl.StaticLoggerBinder的那个。见slf4j.org/codes.html#StaticLoggerBinder
  • @LutzHorn 这解决了我的问题。谢谢!
  • 简单的网络搜索有时会有所帮助。

标签: java maven rabbitmq


【解决方案1】:

您需要在 POM 中的 maven-assembly-plugin 下定义配置“jar-with-dependencies”。因此,当您使用包目标运行时,maven 将在您的包中包含所有必需的 jar。

否则您必须手动提供所有必需的罐子。

【讨论】:

    【解决方案2】:

    您必须在 pom.xml 文件中为 RabbitMQ 添加依赖项,检查以下依赖项代码

        <modelVersion>4.0.0</modelVersion>
      <groupId>com.mmi</groupId>
      <artifactId>PushNotification</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    
      <properties>
            <spring.version>4.3.9.RELEASE</spring.version>
            <log4j.version>1.2.17</log4j.version>
            <aspectj.version>1.7.4</aspectj.version>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
            <dependency> 
                <groupId>org.springframework</groupId> 
                <artifactId>spring-context</artifactId> 
                <version>${spring.version}</version> 
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-config</artifactId>
                <version>3.0.1.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.amqp</groupId>
                <artifactId>spring-amqp</artifactId>
                <version>1.7.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.amqp</groupId>
                <artifactId>spring-rabbit</artifactId>
                <version>1.7.2.RELEASE</version>
            </dependency>
        </dependencies>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      相关资源
      最近更新 更多