2016-07-13 23 views
0

Einführung

Wir tauschen Einkommen Daten mit einer externen Partei. Jedes Jahr ändern sich die Einkommenssteuervorschriften und ein neues Nachrichtenschema muss implementiert werden. Insgesamt haben wir nun 8 verschiedene Schema-Versionen, von denen jede in einer separaten 'Jahr Einkommenssteuer' Anwendung eingesetzt wird und dieser Betrag erhöht sich jedes Jahr um 1.Dynamisch Endpoint-Definition in BizTalk Send Port mit MQSeries-Adapter

Da wir unser Hosting-Unternehmen pro installierter Anwendung bezahlen, möchten wir die Anzahl der installierten Anwendungen verringern.

Alle diese Anwendungen sind funktional gleich, was bedeutet, dass wir eingehende Nachrichten überprüfen und gültige Nachrichten in eine bestimmte MQSeries-Warteschlange weiterleiten. Jede ungültige Nachricht wird an eine Antwortwarteschlange weitergeleitet. Jede Anwendung hat eigene "gültige" und "ungültige" Nachrichtenwarteschlangen.

Der Plan

Eine generische Anwendung, die alle 8 (+) Nachrichten verarbeitet. Neue Schemas müssen ohne Anwendungsänderungen oder Ausfallzeiten für frühere laufende Einkommenssteuerflüsse implementiert werden können.

Bisher ...

ich mehrere Nachrichten auf dem gleichen BizTalk empfangen können empfangen Port (Message XmlDocument) und bin in der Lage, diese Nachrichten dynamisch in einer Orchestrierung zu validieren, indem Sie eine benutzerdefinierte Empfangspipeline (XML Disassembler + XML-Aufruf Validator). Ausnahmen sowie gültige Nachrichten werden wie vorgeschrieben verarbeitet. Es gibt keine Verweise zwischen den Schemas und der generischen Anwendung, sodass Schemas bereitgestellt werden können, ohne dass Prozesse gestoppt werden müssen. So weit, ist es gut.

Die Orchestrierung hat 1 Empfangsform und 2 senden Formen (gültig, ungültig).

SSO enthält die Werte für das Weiterleiten der "gültigen" und "ungültigen" Nachrichten an die richtige Warteschlange. Basierend auf dem eingehenden Nachrichtentyp wird SSO nach der korrekten "gültigen" oder "ungültigen" Warteschlangendefinition befragt.

Das Problem

ich vorher mit dynamischen FTP, FILE, WCF und SMTP-Ports behandelt haben, die alle nach dem Zuführen des Adapters mit den richtigen Kontext Eigenschaften einwandfrei funktioniert. Sogar MSMQ scheint einen ziemlich direkten Ansatz zum dynamischen Festlegen von Transporteigenschaften zu haben.

Ich kann jedoch MQSeries MQMT ContextProperties anscheinend nicht finden, um die Warteschlangendefinition dynamisch festzulegen.

Microsoft bietet nicht viele Informationen auf this, und umfangreiche Suchen im Internet hat mir nichts Nützliches (Beispiele) entweder zur Verfügung gestellt.

Ich habe versucht, IBM's docs mit Microsoft zu vergleichen, aber insgesamt bin ich jetzt festgefahren.

Antwort

1

Ich würde vorschlagen, MQSC Adapter für IBM MQ Integration zu verwenden. Es ist Teil von Host Integration Server MSI. Es erfordert nur, dass der MQ-Client auf dem Server installiert wird Vs MQ Server für Windows-Installation, die für den MQSeries-Adapter erforderlich ist.

Stellen Sie die OutboundTransportLocation Eigenschaft in folgendem Format MQSC: // {} channel/tcp/{server {({port})/{Queuemanager}/{} Name_der_Warteschlange

transport = MQSC

Kontexteigenschaften - Schema kann in der Assembly MQSeriesEx.MQSPropertySchemaEx mit dem Namespace (http://schemas.microsoft.com/BizTalk/2003/mqs-properties) gefunden werden.

Es gibt nur wenige Kontexteigenschaften, die Sie bei Bedarf festlegen müssten.

  • Channel_HeartBeat
  • Channel_MaxMessageLength
  • Channel_UserId
  • Channel_Password
  • Connection

Wenn zusätzliche Eigenschaften erforderlich sind als MQSeries.MQSPropertySchema Kontexteigenschaften verwenden.

0

Danke Vikas für Ihren Vorschlag. Ich folgte Ihren Anweisungen und fand es funktioniert!

Allerdings fand ich es ein wenig komplizierter als nötig, da ich Kanalnamen für jeden Fluss konfigurieren musste.

Die Lösung, die am besten zu mir passte, war diejenige, die ich die ganze Zeit im Sinn hatte, und sie lag direkt vor mir. Meine Versuche sind fehlgeschlagen, weil ich einen fatalen Fehler gemacht habe, indem ich die Eigenschaften der ausgehenden Nachricht so festgelegt habe, dass ich die Eigenschaften des dynamischen Sendeports festlegen sollte.

SendPort(Microsoft.XLANGs.BaseTypes.Address)="MQS://SERVER/QMANAGER/QUEUENAME";