websphere-mq-fte


WMQ FTE in a Distributed Environment


QMGR A has an MFT agent called AgentA.
QMGR B has an MFT agent called AgentB.
QMGR C has an MFT agent called AgentC.
These are all MFT Server deployments, not "client".
QMGR A and B are members of an MQ cluster, called FTECluster
QMGR C connects to QMGR B via a simple sender/receiver pair (outside the cluster).
MFT users on the server where QMGR A runs want to send a file FROM that server to the server where QMGR C runs.
QMGR B is the designated Coordination Qmgr, so if, when connected there via the explorer, I create a transfer, using
QMGRA as the source and
QMGRC as the destination, will I always expect that the agent will encounter a 2087 error (which is what I'm getting), that the target remote queue is not known? Or is there some "extra" setup than needs to be performed to acquaint QMGRA with QMGRC by way of QMGRB?
The application is this: I have enclave based queue managers (QMGRA) that are behind a DMZ (the gateway, QMGR B), and would like to move files for external partners to those inside/outside the enclave via MFT, not unlike we use queues to move messages from overlapping clusters or from queue managers in /out of the cluster to those out/in of an adjoining cluster. OR, to permit file transfers BETWEEN MFT users INSIDE the enclave, so that the traffic is not paraded out onto the DMZ for internal transfers.
If this is not possible, then we'll have to have MFT transfers that are created between clients on internal enclave servers, thru DMZ based MFT servers, and out/in to the external customer base, AND have internal agent/servers on designated enclave queue managers, for the purpose of exchanging files internally.
FTE agents can use standard QMgr routing and aliasing. The textbook way to do this is to name the transmission queues after the destination QMgr and add aliases. For example, on QMGRA you'd define:
* On QMGRA
DEFINE QL(QMGRB) USAGE(XMITQ)
DEFINE QR(QMGRC) XMITQ(QMGRB) RQMNAME('') RNAME('')
Now any messages addressed to QMGRC go through normal name resolution. The QMgr finds the route to QMGRC through QMGRB because of the QRemote. A QRemote definition with a blank RNAME is called a QMgr alias for this reason.
Then on QMGRB you'd have a transmit queue leading to QMGRC and coincidentally named QMGRC. The reverse would apply for getting messages back. You'd need a QMgr alias on C pointing to B.
If your XMit queues do not use the name of the remote QMgr then you'd need additional QMgr aliases. For example, many people append the string XMITQ to an XMit queue name (which in my opinion causes more problems than it solves) and on a system like that you'd need the following:
* On QMGRA
DEFINE QL(QMGRB.XMITQ) USAGE(XMITQ)
DEFINE QR(QMGRC) XMITQ(QMGRB.XMITQ) RQMNAME('') RNAME('')
* On QMGRB
DEFINE QL(QMGRC.XMITQ) USAGE(XMITQ)
DEFINE QR(QMGRC) XMITQ(QMGRC.XMITQ) RQMNAME('') RNAME('')
The first part of this works the same way as before. WMQ looks for QMGRC, finds the QRemote and puts the message onto the named XMitQ. But when the message arrives on QMGRB it cannot resolve directly to the transmission queue because the name doesn't match the remote QMgr. So we define a new QRemote that resolves the name QMGRC to the XMitQ leading to QMGRC.
You can also use cluster resolution between QMGRA and QMGRB. In that case you probably could get away with setting RQMNAME and leaving the XMitQ blank on the QMgr alias on A. Or set both. Another option would be to create a QMgr alias named QMGRC on B and advertise it to the cluster.
Using a dedicated channel keeps the file transfer traffic off of the cluster XMitQ and out of the cluster channel, and so provides a class of service isolation from regular traffic. File transfer traffic is all non-persistent though and no more than a frame-per-file will sit on the XMitQ at a time so you may not need that level of isolation. (With WMQ V7.5 could do the same thing with overlapping cluster and split cluster XMitQ!)
You don't need FTE agents to test this, just use the Q program from SupportPac MA01 and specify both the local QMgr and the remote QMgr name when connecting.
UPDATE from email thread:
OK, so here are the definitions I used to mock this up using the cluster scenario. I defined 3 QMgrs, created a cluster with QMGRA as the repository, QMGRB as a member and a gateway between QMGRB and C using SDR/RCVR channels. Any messages arriving on B from A addressed to C resolve to the XMitQ. A knows about C because of the QMgr alias named QMGRC pointing to QMGRC.XMITQ. (I tried advertising an XMitQ called QMGRC to the cluster but it seems the cluster recognizes it as a local queue and does not perform QMgr name resolution on it. Defining it as QMGRC.XMITQ and creating the QMGRC QMgr alias over it allows QMGRC to resolve locally and from the cluster.)
After running these, I was able to connect using the Q program, without the benefit of QREMOTE definitions that specify an RNAME, and send messages from C to A and from A to C into the queues named TEST.NAME.RESOLUTION like so:
C:\Users\T.Rob>q -m QMGRA -oQMGRC/TEST.NAME.RESOLUTION
MQSeries Q Program by Paul Clarke [ V6.0.0 Build:May 1 2012 ]
Connecting ...connected to 'QMGRA'.
>Testing A to C
>^C
C:\Users\T.Rob>q -m QMGRC -oQMGRA/TEST.NAME.RESOLUTION
MQSeries Q Program by Paul Clarke [ V6.0.0 Build:May 1 2012 ]
Connecting ...connected to 'QMGRC'.
>Testing C to A
>^C
Yes, the cluster name is 'EDELMANN' and in this usage it is pronounced just like Jerry Seinfeld used to pronounce "Newman". ;-)
* On QMGRA:
ALTER QMGR +
REPOS(EDELMANN)
DEFINE QLOCAL('TEST.NAME.RESOLUTION') +
DEFPSIST(YES) +
REPLACE
DEFINE CHANNEL('EDELMANN.QMGRA') +
CHLTYPE(CLUSRCVR) +
CLUSTER('EDELMANN') +
CONNAME('localhost(3414)') +
TRPTYPE(TCP) +
REPLACE
* On QMGRB:
DEFINE QREMOTE('QMGRC') +
CLUSTER('EDELMANN') +
RQMNAME('QMGRC') +
XMITQ('QMGRC.XMITQ') +
REPLACE
DEFINE QLOCAL('QMGRC.XMITQ') +
INITQ('SYSTEM.CHANNEL.INITQ') +
TRIGGER +
TRIGDATA('QMGRB.QMGRC') +
USAGE(XMITQ) +
REPLACE
DEFINE CHANNEL('EDELMANN.QMGRA') +
CHLTYPE(CLUSSDR) +
CLUSTER('EDELMANN') +
CONNAME('localhost(3414)') +
TRPTYPE(TCP) +
REPLACE
DEFINE CHANNEL('EDELMANN.QMGRB') +
CHLTYPE(CLUSRCVR) +
CLUSTER('EDELMANN') +
CONNAME('localhost(3415)') +
TRPTYPE(TCP) +
REPLACE
DEFINE CHANNEL('QMGRB.QMGRC') +
CHLTYPE(SDR) +
CONNAME('localhost(3416)') +
TRPTYPE(TCP) +
XMITQ('QMGRC.XMITQ') +
REPLACE
DEFINE CHANNEL('QMGRC.QMGRB') +
CHLTYPE(RCVR) +
TRPTYPE(TCP) +
REPLACE
* On QMGRC:
DEFINE QREMOTE('QMGRA') +
RQMNAME('QMGRA') +
XMITQ('QMGRB') +
REPLACE
DEFINE QLOCAL('QMGRB') +
INITQ('SYSTEM.CHANNEL.INITQ') +
TRIGGER +
TRIGDATA('QMGRC.QMGRB') +
USAGE(XMITQ) +
REPLACE
DEFINE QLOCAL('TEST.NAME.RESOLUTION') +
REPLACE
DEFINE CHANNEL('QMGRB.QMGRC') +
CHLTYPE(RCVR) +
TRPTYPE(TCP) +
REPLACE
DEFINE CHANNEL('QMGRC.QMGRB') +
CHLTYPE(SDR) +
CONNAME('localhost(3415)') +
TRPTYPE(TCP) +
XMITQ('QMGRB') +
REPLACE

Related Links

ANT FTE fte:filemove command no return code for large file
Syntax for PRESOURCE call using Protocol bridge agent as source in MQFTE
MQ-FTE options for email alerting on errors or monitoring (to be able to support the solution during Test and then Prod Support)?
Limit MQFTE file transfer to one file at a time
Using -bs parameter (batch size, matches per task) in IBM MQ FTE transfer
Space in Directory for WebSphere MQ FTE transfer
How to retry file transfer using transferId (IBM MQ fte)
How to handle FTE queued transfers
How to monitor FTE agent status
wmq-fte precall java failed
WMQ FTE in a Distributed Environment
FTE should not pick the file until unless file is ready for transfer
How to configure a fte ant script so it can perform few task before file transfer
How to implement logging in fte ant script

Categories

HOME
vim
openmp
webpack
ngrx
reserved
grep
octobercms
kalman-filter
rsync
spring-jdbc
icloud
ckeditor
ezpublish
directx
esper
slurm
communication
export-to-csv
nstableview
postgres-xl
circular-dependency
leiningen
flask-wtforms
windows-server-2012
dosgi
graphlab
fatal-error
riot.js
devops
qhull
spark-jobserver
xacml
facebook-apps
madlib
socialengine
semantic-versioning
calibre
framemaker
accelerate-framework
android-kernel
language-concepts
main
swisscomdev
neuroscience
mixture-model
streamsets
webdriver-manager
gulp-sourcemaps
texmaker
firebase-admin
android-mediaprojection
midl
acoustics
babel-core
hibernate-tools
filepicker
pebble-watch
togetherjs
gabor-filter
colorama
tactic
snmptrapd
epson
xcb
pcf
persist
bluegiga
design-by-contract
xna-4.0
execute
tmuxinator
wordml
wyam
sframe
android-listview
jsapi
npapi
geonetwork
angularjs-ng-click
javafx-webengine
onactivityresult
tld
contenttype
yorick
system.net.webexception
htmlcleaner
java.nio.file
mbr
uv-mapping
free-variable
anonymous-methods
path-separator
bitsharp
javaspaces
gnu-prolog
window-management
hamachi
f#-powerpack
invite
celltable
visitor-statistic
eqatec
lzh
uiq3

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App