【问题标题】:Migrating IBM MQ to javax.jms.* implementation - How does MQOPEN translate to JMS API?将 IBM MQ 迁移到 javax.jms.* 实现 - MQOPEN 如何转换为 JMS API?
【发布时间】:2013-06-30 11:15:40
【问题描述】:

在使用 MQ 和 JMS api 时如何获得与 ibm 专有 mq api 的 openOptions 相同的效果?

JMS API 中是否还有 openOptions 的概念?如果是这样,就 API 类/方法而言,等效项是什么?

Related stackoverflow question - migrating-from-ibm-mq-to-javax-jms-weblogic

【问题讨论】:

  • 请发布您的 MQ 代码。很难弄清楚您实际使用的是哪些选项。
  • 没有代码。这是关于标准的一般问题。我一定不是太清楚了。

标签: java jms ibm-mq


【解决方案1】:

这个简单的例子展示了如何发送Message(使用JBoss MQ):

    final Properties initialContextProperties = new Properties();
    initialContextProperties.put("java.naming.factory.initial",
            "org.jnp.interfaces.NamingContextFactory");
    initialContextProperties.put("java.naming.provider.url",
            "jnp://localhost:1099");

    //

    final InitialContext ic = new InitialContext(initialContextProperties);

    final QueueConnectionFactory qcf = (QueueConnectionFactory) ic
            .lookup("XAConnectionFactory");

    final Queue queue = (Queue) ic.lookup("queue/A");

    //

    final QueueConnection queueConnection = qcf.createQueueConnection();

    final boolean transacted = false;
    final QueueSession queueSession = queueConnection.createQueueSession(
            transacted, Session.AUTO_ACKNOWLEDGE);

    final QueueSender queueSender = queueSession.createSender(queue);

    final TextMessage textMessage = queueSession.createTextMessage("Hello");
    queueSender.send(textMessage);

所以在不同的阶段/级别有不同的选择:

  • 您通常需要一些属性来进行 JNDI 查找(以获取 InitialContext)。
  • 您必须使用 JNDI 按名称查找工厂和队列。
  • 创建QueueSession时有一些设置:已交易,确认。
  • QueueSession 实例上调用createSendercreateReceivercreateBrowser 时指定用法。

【讨论】:

  • 嗯,我的问题一定不是很清楚。我更简单地问“在将 MQ 与 jms api 一起使用时,如何获得与 ibm 专有的 mq api 的 openOptions 相同的效果?”
【解决方案2】:

你在比较苹果和橘子。是的,两者都是水果,但它们是完全不同的水果。两者之间没有直接的比较。

1) 带有“transacted”和“createSender”的 JMS 会话基本上是带有同步点的开放输出。 即

// Open Options
int oo = MQC.MQOO_OUTPUT + MQC.MQOO_INQUIRE + MQC.MQOO_FAIL_IF_QUIESCING;
// Put Msg Options
MQPutMessageOptions pmo = new MQPutMessageOptions();
pmo.options = MQC.MQPMO_SYNCPOINT + MQC.MQPMO_FAIL_IF_QUIESCING;

2) 带有“createReceiver”(非事务)的 JMS 会话基本上是一个开放输入。 即

int oo = MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_INQUIRE + MQC.MQOO_FAIL_IF_QUIESCING;
// Get Msg Options
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQC.MQGMO_FAIL_IF_QUIESCING;

【讨论】:

  • 好酷。感谢您的信息。
猜你喜欢
  • 2013-05-27
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 2020-04-23
相关资源
最近更新 更多