将消息从MQ发送到EMS(JMS)队列

新手:

我想将MQ队列中的消息发送到不同服务器上的EMS队列。我不确定如何使用Java做到这一点。我如何确保发送消息时不会丢失任何消息。

我可以使用Java使用来自MQ的消息。

try {
    // Create a connection factory
    JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
    JmsConnectionFactory cf = ff.createConnectionFactory();

    // Set the properties
    cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, HOST);
    cf.setIntProperty(WMQConstants.WMQ_PORT, PORT);
    cf.setStringProperty(WMQConstants.WMQ_CHANNEL, CHANNEL);
    cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
    cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, QMGR);
    cf.setStringProperty(WMQConstants.WMQ_APPLICATIONNAME, "JmsPutGet (JMS)");
    cf.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, true);
    cf.setStringProperty(WMQConstants.USERID, APP_USER);
    cf.setStringProperty(WMQConstants.PASSWORD, APP_PASSWORD);

    // Create JMS objects
    context = cf.createContext();
    destination = context.createQueue("queue:///" + QUEUE_NAME);

    long uniqueNumber = System.currentTimeMillis() % 1000;
    TextMessage message = context.createTextMessage("Your lucky number today is " + uniqueNumber);

    producer = context.createProducer();
    producer.send(destination, message);
    System.out.println("Sent message:\n" + message);

    consumer = context.createConsumer(destination); // autoclosable
    String receivedMessage = consumer.receiveBody(String.class, 15000); // in ms or 15 seconds

    System.out.println("\nReceived message:\n" + receivedMessage);

    recordSuccess();
} catch (JMSException jmsex) {
    recordFailure(jmsex);
}

System.exit(status);
Axel Podehl:

您的代码几乎是正确的,但是如果要在程序中切换JMS提供程序,则还必须切换JMS ConnectionFactory。这是从中创建使用者和消息的中央(特定于提供商的)类。

因此,在创建上下文,生产者和消息时,您需要使用TIBCO com.tibco.tibjms.naming.TibjmsInitialContextFactory,例如:

try {

  // 1) Create a MQ connection factory
  JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
  JmsConnectionFactory cf = ff.createConnectionFactory();

  // 2) Set the properties
  cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, HOST);
  cf.setIntProperty(WMQConstants.WMQ_PORT, PORT);
  cf.setStringProperty(WMQConstants.WMQ_CHANNEL, CHANNEL);
  cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
  cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, QMGR);
  cf.setStringProperty(WMQConstants.WMQ_APPLICATIONNAME, "JmsPutGet (JMS)");
  cf.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, true);
  cf.setStringProperty(WMQConstants.USERID, APP_USER);
  cf.setStringProperty(WMQConstants.PASSWORD, APP_PASSWORD);

  // 3) Create MQ consumer
  JMSContext mqContext = cf.createContext();
  destination = mqContext.createQueue("queue:///" + QUEUE_NAME);
  consumer = mqContext.createConsumer(destination); // autoclosable

  // 4)  wait for message from MQ (or null)
  String receivedText = mqContext.receiveBody(String.class, 15000); // in ms or 15 seconds
  System.out.println("\nReceived message:\n" + receivedText);

  // 5) Create TIBCO EMS ConnectionFactory and an EMS MessageProducer
  TibjmsConnectionFactory emsCF = new com.tibco.tibjms.TibjmsConnectionFactory( "tcp://1.2.3.4:7222");
  Connection emsConnection = emsCF.createConnection(user, password);
  Session emsSession = emsConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  MessageProducer emsProducer = emsSession.createProducer( emsSession.createQueue(QUEUE_NAME) );

  // 6) Create EMS TextMessage from MQ TextMessage
  TextMessage emsMsg = emsSession.createTextMessage( receivedText );

  // 7) publish to EMS
  emsProducer.send(emsMsg);

  // 8) cleanup
  emsConnection.close();

  recordSuccess();
} catch (JMSException jmsex) {
   recordFailure(jmsex);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用jms将多个消息发送到队列

如何使用JavaScript将消息发送到JMS队列?

使用Spring Boot将消息发送到JMS队列

使用Java Swing将消息发送到JMS队列

如何使JMS消息发送到MQ以完全提交?

通过连接池将JMS消息发送到JBoss AS中的远程队列

如何使用JMS队列将消息发送到特定的接收者

如何将原始消息有效负载发送到JMS错误队列

无法使用Spring的JmsTemplate将JMS消息发送到activemq队列

1分钟后,骆驼继续通过JMS将消息发送到队列中

使用Java将XML内容发送到JMS队列

无法将批量消息发送到Solace MQ

无法将消息发送到weblogic队列

KafkaProducer无法成功将消息发送到队列中

是否可以将Azure队列消息发送到端点

将JSON消息发送到Azure队列存储

PHP ampq + Rabbit MQ-运行时间长的生产者:可以将消息发送到已经声明的队列,但是不能声明新的队列

连接停止时,JMS连接传递发送到队列的消息

使用 SQS 队列的 lambda 函数如何将消息发送到死信队列?

无法使用JmsTemplate发送到XA JMS队列

如何将SWFT消息发送到远程服务器上的MQ?

我可以从应用程序服务器外部将消息发送到JMS队列吗?

将 JMS 消息从 Java EE 应用程序发送到 Java SE 应用程序

如何使用 JMS 将预定消息发送到 Azure 服务总线

使用AWS Lambda Python API将消息发送到AWS SQS队列超时

如何使用Scala将消息正确发送到Amazon SMS队列?

NATS 发布者能否将一条消息发送到多个队列中?

烧瓶邮件队列消息将发送到不同的电子邮件

烧瓶邮件队列消息将发送到不同的电子邮件