繁体   English   中英

从Java代码调用RabbitMQ Publisher

[英]Invoking rabbitmq publisher from java code

我有2个基本程序。第一个叫做ext.java ,第二个叫做send.java 。要发布的内容位于名为data的文件中

  • 第一个Java程序打开命令提示符并执行第二个Java程序。
  • 然后,第二个Java程序将文件内容发布到Rabbitmq服务器中排队。

我使用apache commons库函数FileUtils.readFileToString(file,format)读取文件。
当我send.java qname filepath执行send.java qname filepath ,它将推送内容。
但是,当我从ext.java程序调用同一个命令时,传递了命令行辩论(这是在eclipse项目中),它会引发如下异常:

java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils

环境变量都已正确设置。以下是代码文件。

ext.java

public static void main(String[] args) throws IOException {     
        File f = new File("C:\\Users\\Pradeep\\Desktop\\pros\\externalJava\\data");                 
        Runtime.getRuntime().exec("cmd.exe /c start java send f0 "+f.getAbsolutePath());
    }

send.java

import com.rabbitmq.client.*;
import org.apache.commons.io.*;
import java.io.File;

public class send {

  public static void main(String[] argv) throws Exception {
     ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel(); 
    File f = new File(argv[1]);
    String message = FileUtils.readFileToString(f,"UTF-8");
    channel.basicPublish("", argv[0], null, message.getBytes("UTF-8"));

    channel.close();
    connection.close(); 
  }
}

您将需要指定classpath ,以及以点带面的JVM在哪里查找FileUtils (和rabbitmq相关类为好)。 在这里您具有相关文档https://docs.oracle.com/javase/tutorial/essential/environment/paths.html

另一种方法是创建可执行JAR以便将类路径包含在JAR的清单文件中,从而无需在CLI上指定类路径。 它将像java -jar Executable.Jar一样运行

所以试试这个:

 Runtime.getRuntime().exec("cmd.exe /c start java -cp PathToYourLibraries send f0 "+f.getAbsolutePath());

它从eclipse运行,因为它向用户透明地设置了正确的类路径-将libraries中的所有条目添加到类路径以及已编译类的路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM