我将如何向Activemq发送消息

4

我从来没有使用过 JMS。最近我下载了 Activemq 并将所有 conf/activemq-*.xml 文件中的端口号从 61616 改为 61617。我在命令提示符中运行了以下命令,并在浏览器上打开了控制台页面。

  C:\Users\Infratab Bangalore\Desktop\Queueing\apache-activemq-5.8.0\bin>activemq

enter image description here

我希望用JMS从Java代码中向Activemq发送消息。为此,我编写了以下代码,并使用Apache Tomcat服务器运行我的代码。但它没有起作用。

这段代码是在Eclipse中实现的。

package PackageName;

import java.io.IOException;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.activemq.ActiveMQConnectionFactory;

public class MessageProducer extends HttpServlet {
    @Override
    protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
        try {
            //created ConnectionFactory object for creating connection 
            ConnectionFactory factory = new ActiveMQConnectionFactory("admin", "admin", "tcp://localhost:61617");
            //Establish the connection
            Connection connection = factory.createConnection();
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            Queue queue = session.createQueue("Test");
            //Added as a producer
            javax.jms.MessageProducer producer = session.createProducer(queue);
            // Create and send the message
            TextMessage msg = session.createTextMessage();
            msg.setText("TestMessage");
            producer.send(msg);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
}

我遇到了以下错误。
 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
org.apache.activemq.ActiveMQPrefetchPolicy.<clinit>(ActiveMQPrefetchPolicy.java:30)
org.apache.activemq.ActiveMQConnectionFactory.<init>(ActiveMQConnectionFactory.java:88)
PackageName.MessageProducer.service(MessageProducer.java:20)
javax.servlet.http.HttpServlet.service(HttpServlet.java:723)

你能给我提供建议,告诉我哪里写错了吗。

谢谢。


ActiveMQ 可能正在使用 commons-logging.jar,但似乎在您的类路径中找不到它。请检查一下。 - Diego Urenia
@drurenia 我在我的lib文件夹中添加了三个.jar文件,它们的名称分别为activemq-all-5.0.0.jarcommons-io-2.4.jargeronimo-spec-corba-1.0.jar。我在classpath中添加了以下路径:C:\ Users \ Infratab Bangalore \ Desktop \ Queueing \ geronimo-spec-corba-1.0.jar;。所以我需要将commons-logging.jar添加到我的classpath中吗?如果需要重新添加,我想下载它。这样可以吗? - Hanumath
是的,看起来你没有使用Maven,那么你需要下载commons-logging.jar并将其添加到你的类路径中,就像你使用activemq-all-5.0.0.jar时所做的一样。 - Diego Urenia
我将 activemq-all-5.0.0.jar 添加到我的 lib 文件夹中,而不是类路径中。你能看到我在 @Ashish 的回答中留下的评论吗? - Hanumath
1
我认为你应该阅读这篇文章以理解我的意思:https://dev59.com/BnRC5IYBdhLWcg3wW_pk - Diego Urenia
@drurenia,非常感谢您提供的宝贵链接,它运行得非常好。您能否告诉我现在我添加了3个.jar文件,这些文件是完成此任务所需的。因为我想删除不必要的jar文件。再次真心感谢您。 - Hanumath
2个回答

5

我下载了 commons-logging-1.1.3.zip 文件并将其放置在 C:\Users\Infratab Bangalore\Desktop\Queueing 文件夹下。我添加了类路径,如 C:\Users\Infratab Bangalore\Desktop\Queueing\commons-logging-1.1.3。我重新启动了我的 Eclipse,但仍然无法正常工作。 - Hanumath
我在我的lib文件夹中添加了commons-logging-1.1.3.jar文件。它运行得非常好。 - Hanumath

2
这条消息来自ActiveMQPrefetchPolicy的第38行,它出现在类初始化期间(因为它是静态字段)(grepcode中的示例代码行http://grepcode.com/file/repository.springsource.com/org.apache.activemq/com.springsource.org.apache.activemq/5.3.0/org/apache/activemq/ActiveMQPrefetchPolicy.java#38)。您需要common-logging.jar作为应用程序类路径中的依赖项才能运行。您可能会遇到其他错误。我建议您在互联网上查找一些示例,例如ActiveMQ in Action第8章的示例->http://code.google.com/p/activemq-in-action/source/browse/#svn%2Ftrunk%2Fexamples%2Fchapter8%2Fjms-webapp-jboss%253Fstate%253Dclosed
祝好,
Luan

我在向 Activemq 发送消息时收到以下警告: log4j:WARN No appenders could be found for logger (org.apache.activemq.transport.WireFormatNegotiator). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 我该如何解决? - Hanumath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接