嗨,我想从我的 JSP 连接并发送一条 JMS 消息到我在 Tibco 安装过程中安装的 JMS 服务器。现在通过浏览互联网上的各种东西,我知道如何将消息从 JAVA 发送到 JMS 队列,但问题是我不知道如何连接到 JMS 服务器本身。任何人都可以在这方面帮助我。谢谢
3 回答
您需要在 Java EE 应用服务器上配置它 - WebLogic、JBOSS、Glassfish 等。
如果您在 Tomcat 或 Jetty 上部署 JSP,并且不使用成熟的 Java EE 应用程序服务器,则必须向其添加 JMS 模块 - 寻找 ActiveMQ 或 RabbitMQ 或 OpenJMS。
基本上,您需要通过在 JNDI 目录中查找来获取连接工厂,所有其他对象都是从该连接工厂创建的。
这是一个示例(来自 JBoss 文档),展示了如何创建主题会话:
InitialContext iniCtx = new InitialContext();
Object tmp = iniCtx.lookup("ConnectionFactory");
TopicConnectionFactory tcf = (TopicConnectionFactory) tmp;
conn = tcf.createTopicConnection();
topic = (Topic) iniCtx.lookup("topic/testTopic");
session = conn.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
conn.start();
更多示例在这里
这是一个古老的话题,但也许它可以提供帮助。
要从用户界面发送消息(单击按钮),您需要将按钮单击事件映射到 Java 端。然后,您可以编写向 JMS 发送消息的 java 代码。
要将消息发送到 JMS 队列实际上需要以下内容:
Context context = null;
QueueConnection queueConnection = null;
QueueSession queueSession = null;
Queue queue;
这就是它的工作原理:
context = getContext(host, port, user, password);
queueConnection = getConnectionFactory(context, connectionFactoryJndi);
queueSession = getQueueSession(queueConnection);
queue = getQueue(context, queueJndi);
// send a text message
queueConnection.start();
String message = "hello";
sendMessageToQueue(verbose, message, queueSession, queue);
queueConnection.stop();
要获取您需要连接到服务器的上下文:
private Context getContext(String host, int port, String user, String password) throws NamingException {
String url = String.format("%s://%s:%d", protocol, host, port);
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactory);
env.put(Context.PROVIDER_URL, url);
env.put(Context.SECURITY_PRINCIPAL, user);
env.put(Context.SECURITY_CREDENTIALS, password);
return new InitialContext(env);
}
获取连接工厂:
private QueueConnection getConnectionFactory(Context context, String jndiName)
throws NamingException, JMSException {
QueueConnectionFactory connectionFactory = (QueueConnectionFactory) context.lookup(jndiName);
return connectionFactory.createQueueConnection();
}
打开队列会话:
private QueueSession getQueueSession(QueueConnection queueConnection) throws JMSException {
return queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
}
获取队列:
private Queue getQueue(Context context, String jndiName) throws NamingException {
return (Queue) context.lookup(jndiName);
}
最后,将您的消息发送到队列:
私有静态无效 sendMessageToQueue(布尔详细,字符串消息,QueueSession queueSession,队列队列)抛出 JMSException {
TextMessage textMessage = queueSession.createTextMessage(message);
try (QueueSender queueSender = queueSession.createSender(queue)) {
queueSender.send(textMessage);
}
}
这些代码片段来自这里:https ://github.com/zappee/jms-message-sender 这是一个 JMS 发送器命令行工具,你可以以这个项目为例。
希望它有所帮助。