MQ Message Replication (MQMR) is an MQ API Exit. An MQ API Exit is configured to run within the queue manager’s address space (or the application’s address space if the application connects in bindings mode to the queue manager).
For MQMR v1.1.0, a customer requested that information be added to the replicated messages, so that the consumer application would know what the source queue manager names and source queue names were. This was done with via MQ’s named properties.
In MQMR v2.0.0, 2 auxiliary programs were added: mq2sdb and sdb2mq. These programs allowed the customer to offload replicated messages to an SQLite database and the ability to reload the message to a queue.
I also published the format of the tables in the SQLite database.
Recently, a customer requested that the source queue manager names and source queue names be written to the SQLite database. At first, I was a little reluctant to do it because I had published the format of the table in the SQLite database but then I realize that I could add 2 columns to the end of the table plus add 2 new tables to handle the information without affecting other customer’s applications.
(1) mq2sdb program has a new keyword called: IncludeSourceInfo. IncludeSourceInfo specifies whether or not the source queue manager name and queue name (if present) be written to the SQLite database. The default value is N.
(2) sdb2mq program has 3 new keywords: UseSelect, SelectQMgrName & SelectQName. UseSelect specifies whether or not the rows of the IBM_MQ_MESSAGES table will be selected by either queue manager name or queue name or both. The default value is N.
For those 3rd party applications that customers use to offload replicated messages from a target queue, here are the new tables in the SQLite database:
CREATE TABLE IBM_MQ_MESSAGES(Version INT, Report INT, MsgType INT, Expiry INT, Feedback INT, Encoding INT, CodedCharSetId INT, Priority INT, Persistence INT, BackoutCount INT, PutApplType INT, MsgSeqNumber INT, Offset INT, MsgFlags INT, OriginalLength INT, Format CHAR(8), ReplyToQ CHAR(48), ReplyToQMgr CHAR(48), UserIdentifier CHAR(12), ApplIdentityData CHAR(32), PutApplName CHAR(28), PutDate CHAR(8), PutTime CHAR(8), ApplOriginData CHAR(4), MsgId BLOB, CorrelId BLOB, AccountingToken BLOB, GroupId BLOB, Data BLOB, Source_QMgr_Id INT, Source_Queue_Id INT ); CREATE TABLE SOURCE_QMGR_NAMES(Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, QMgrName CHAR(48) NOT NULL UNIQUE ); CREATE TABLE SOURCE_QUEUE_NAMES(Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, QueueName CHAR(48) NOT NULL UNIQUE );
I have completed a wide variety of tests and everything looks good. The customer is now also testing the latest release of MQMR.
If anyone would like to test out the latest release then send the email to support@capitalware.com
Regards,
Roger Lacroix
Capitalware Inc.