使用Java发送JMS消息

时间:2011-01-24 10:23:10

标签: java jms tibco

您好我想连接并从我的JSP发送JMS消息到我作为Tibco安装的一部分安装的JMS服务器。现在通过浏览互联网上的各种内容,我知道如何将消息从JAVA发送到JMS队列,但问题是我不知道连接到JMS服务器本身的锄头。 任何人都可以帮助我。 感谢

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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();

更多示例here

答案 2 :(得分:0)

这是一个古老的话题,但也许它会有所帮助。

要从用户界面(单击按钮)发送消息,您需要将按钮单击事件映射到 Java 端。然后你就可以写一段java代码向JMS发送消息了。

要将消息发送到 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);
}

最后,将您的消息发送到队列:

private static void sendMessageToQueue(boolean verbose, 字符串消息, QueueSession queueSession, Queue queue) 抛出 JMSException {

TextMessage textMessage = queueSession.createTextMessage(message);

try (QueueSender queueSender = queueSession.createSender(queue)) {
    queueSender.send(textMessage);
}

}

这些代码片段来自这里:https://github.com/zappee/jms-message-sender 这是一个 JMS 发送方命令行工具,您可以以此项目为例。

希望对您有所帮助。