1

嗨,我想从我的 JSP 连接并发送一条 JMS 消息到我在 Tibco 安装过程中安装的 JMS 服务器。现在通过浏览互联网上的各种东西,我知道如何将消息从 JAVA 发送到 JMS 队列,但问题是我不知道如何连接到 JMS 服务器本身。任何人都可以在这方面帮助我。谢谢

4

3 回答 3

2

您需要在 Java EE 应用服务器上配置它 - WebLogic、JBOSS、Glassfish 等。

如果您在 Tomcat 或 Jetty 上部署 JSP,并且不使用成熟的 Java EE 应用程序服务器,则必须向其添加 JMS 模块 - 寻找 ActiveMQ 或 RabbitMQ 或 OpenJMS。

于 2011-01-24T10:26:26.673 回答
1

基本上,您需要通过在 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();

更多示例在这里

于 2011-01-24T12:19:53.000 回答
0

这是一个古老的话题,但也许它可以提供帮助。

要从用户界面发送消息(单击按钮),您需要将按钮单击事件映射到 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 发送器命令行工具,你可以以这个项目为例。

希望它有所帮助。

于 2021-02-09T14:24:52.363 回答