【发布时间】:2013-09-07 19:31:23
【问题描述】:
我想在项目中实现Pub/Sub 域。基本上我不是Java 开发人员,使用谷歌帮助。我阅读了这个Link。
我开始实现以下结构。
我将Java应用程序名称写为MessageConsumer.java,用于接收来自AMQ代理的消息并放置在Webserver(Apache Tomcat)中。
消息消费者代码:
package PackageName;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Consumer extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
try {
//creating connectionfactory object for way
ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("admin","admin","tcp://localhost:61617");
//establishing the connection b/w this Application and Activemq
Connection connection=connectionFactory.createConnection();
Session session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic queue=session.createTopic("MessageTesting");
javax.jms.MessageConsumer consumer=session.createConsumer(queue);
//fetching queues from Activemq
MessageListener listener = new MyListener();
consumer.setMessageListener(listener);
connection.start();
}
catch (Exception e) {
// TODO: handle exception
}
}
}
另外,我编写了另一个用于处理消息的 Java 应用程序(MyListener.java)。
MyListener.java 代码:
package PackageName;
import java.io.*;
import java.net.*;
import javax.jms.*;
public class MyListener implements MessageListener {
public void onMessage(Message msg) {
TextMessage msg1=(TextMessage)msg;
//just for your understanding I mention dummy code
//System.out.println(msg1.getText());
MyListener ml=new MyListener();
try {
ml.executeHttp("http://localhost:8080/ExecutableFileProcess/ClassName");
System.out.println(msg1.getText());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
这两个 Java 应用程序都在 webserver(Apache Tomcat) 中。到目前为止,我们按照以下方式进行跟踪。
- 在向 Topic 发送消息之前,我们通过浏览器上的 HTTP 触发 MessageConsumer.java。
知道了,我们正在尝试什么。最初我们不想触发MessageConsumer.java。
意思是,假设MessageConsumer.java 在网络服务器中。最初如果 AMQ 从任何地方获取消息,我们的 MessageConsumer.java 应该处理自己的逻辑。
我希望你们明白我们在尝试什么。
我从不在Apache Camel工作,你能解释清楚吗。
谢谢。
【问题讨论】:
-
你能重新表述你的问题吗?