2016-12-01 1 views
2

Ich versuche, rubywmq gem zu verwenden, um eine Nachricht in einem IBM MQ Pub/Sub-Thema zu veröffentlichen. Ich sehe keine direkte Art der Veröffentlichung von Ruby-Code zum Thema.So veröffentlichen Sie eine Nachricht in IBM WebsphereMQ TOPIC mithilfe von rubywmq gem

Im Folgenden ist der MQ THEMA, SUB Setup MQSC:

DEFINE TOPIC(MY_TOPIC) TOPICSTR('COM/APP') 
DEFINE QALIAS(MY_TOPIC_Q) TARGET(MY_TOPIC) TARGTYPE(TOPIC) 

DEFINE QLOCAL(APP.RAW.INPUT) 
DEFINE QLOCAL(APP.VALIDATOR.INPUT) 
DEFINE QLOCAL(APP.ENRICHER.INPUT) 
DEFINE QLOCAL(APP.XFORM.INPUT) 
DEFINE QLOCAL(APP.LOGGER.INPUT) 

DEFINE SUB(SUB.APP.RAW.INPUT)  TOPICOBJ(MY_TOPIC) TOPICSTR('MSG/RAW') DEST(APP.RAW.INPUT) 
DEFINE SUB(SUB.APP.VALIDATOR.INPUT) TOPICOBJ(MY_TOPIC) TOPICSTR('MSG/XML') DEST(APP.VALIDATOR.INPUT) 
DEFINE SUB(SUB.APP.ENRICHER.INPUT) TOPICOBJ(MY_TOPIC) TOPICSTR('MSG/VLD') DEST(APP.ENRICHER.INPUT) 
DEFINE SUB(SUB.APP.XFORM.INPUT)  TOPICOBJ(MY_TOPIC) TOPICSTR('MSG/ENR') DEST(APP.XFORM.INPUT) 
DEFINE SUB(SUB.APP.LOGGER.INPUT) TOPICOBJ(MY_TOPIC) TOPICSTR('#')  DEST(APP.LOGGER.INPUT) 

Ich habe auch versucht mit MQRFH2 Header Ruby-Code für das Thema zu Aliaswarteschlange Veröffentlichung:

WMQ::QueueManager.connect(:connection_name => conn_name, :channel_name => channel_name, :q_mgr_name=> queue_manager) do |qmgr| 
    message   = WMQ::Message.new 
    message.data = 'Hello World' 
    message.headers = [ 
     { 
     header_type: :rf_header_2, 
     xml: ['<route>COM/APP/MSG/RAW</route>'] 
     } 
    ] 
    message.descriptor[:format] = WMQ::MQFMT_STRING 
    qmgr.put(q_name: 'MY_TOPIC_Q', message: message) 
end 

Und dann fügen Sie ein SUB mit Wahl wie:

DEFINE SUB(SUB.APP.RAW.INPUT) TOPICOBJ(MY_TOPIC) TOPICSTR('MSG/RAW') DEST(APP.RAW.INPUT) PSPROP(RFH2) SELECTOR('route = ''COM/APP/MSG/RAW''') 

kann nicht gelingen. Könnte jemand bitte auf das Problem hinweisen oder eine Alternative vorschlagen? Vielen Dank.

Software-Version:

  • IBM WMQ Server &-Client v7.5
  • Rubin v2.3.0
  • rubywmq v2.1.1

Antwort

1

Die QALIAS zu einem Punkt muss THEMA Objekt spezifisch für die TOPICSTR Sie möchten veröffentlichen zu. Beispiel:

DEFINE TOPIC(MY_TOPIC_MSG_RAW) TOPICSTR('COM/APP/MSG/RAW') 
DEFINE QALIAS(MY_TOPIC_Q) TARGET(MY_TOPIC_MSG_RAW) TARGTYPE(TOPIC) 
3

eine Nachricht an einen Alias ​​über ein Thema zu platzieren, ist eine Methode, Punkt-zu-Punkt-Anwendungen zu pub/sub zu konvertieren. Da der API-Aufruf PUT ist und nicht PUBLISH, gibt es keinen Mechanismus zum Hinzufügen einer Topic-Zeichenfolge zum Präfix, das vom Topic-Objekt bereitgestellt wird. Die Nachrichten werden in der Themenzeichenfolge wie im Themenobjekt definiert und nicht weiter veröffentlicht. Ihr SUB.APP.LOGGER.INPUT Abonnement sollte die Publikationen sehen, aber nicht die anderen.

Es gibt einige andere Probleme im geposteten Code. Das Erstellen eines RFH2-Headers legt nahe, dass Sie sich auf Dokumente von vielleicht schon v5.3 oder v6 verlassen. Leider wird nicht erwähnt, in welcher Version sich der MQ-Server befindet oder welche Version der Client-Bibliotheken von Ruby verwendet wird.

Es wird auch nicht erwähnt, was Sie mit "Konnte nicht erfolgreich" gemeint haben. Bedeutet das, dass Sie keine Publikationen gesehen haben, sogar auf SUB.APP.LOGGER.INPUT Pub erschien PUT Nachrichten OK? Oder die PUT hat einen Code mit schlechtem Grund zurückgegeben? Oder dass Sie Nachrichten auf SUB.APP.LOGGER.INPUT bekommen haben, aber nirgendwo sonst?

Zum Debuggen können Sie MQ Explorer, das Beispiel amqsput oder eines der anderen mitgelieferten Tools verwenden, um eine Nachricht in die Alias-Warteschlange zu löschen und nach der Ausgabe zu suchen. Der Unterschied zwischen diesem Test und Ihrem Ruby-Test sollte helfen, das Problem zu diagnostizieren.

Bitte kommen Sie zurück und aktualisieren Sie Ihre Frage mit zusätzlichen Details, wenn Sie eine weniger spekulative Antwort wünschen.

+0

Hallo Rob, danke für deine Antwort. Ich habe meine Frage aktualisiert, um die verwendeten Versionen anzuzeigen. Ich konnte mithilfe von MQ Explorer überprüfen, ob das Thema eine Nachricht erhalten hat, wenn es an den Aliasnamen der Themenwarteschlange gesendet wurde. Warteschlangen, die das Thema abonniert haben, haben jedoch keine Nachrichten erhalten. Inhaltsbasiertes Routing mit PSPROP und SELECTOR funktionierte nicht. – Ambal

+1

Das Problem besteht weiterhin darin, dass ein Alias ​​über ein Thema * niemals * zu einer Topic-Zeichenfolge führt, die länger ist als die im Topic-Objekt. Da das einzige mögliche Thema "COM/APP" ist, wird keine Veröffentlichung in der Subskriptionswarteschlange landen, daher kann der Selektor nichts tun. Ich würde vorschlagen, den Publisher ohne die Abonnenten-App auszuführen, bis Sie Nachrichten in den Abonnementwarteschlangen erhalten. –

Verwandte Themen