Does Apache Active MQ provide Server-To-Server-Connection as IBM Websphere MQ does?
Background:
We currently have Websphere MQ 7.0.1 (CUST) installed to communicate with another remote Websphere MQ Server (GOV), which is not under our control.
The MQs hold a Server-To-Server-Connection via VPN-tunnel. We would like to replace our Websphere MQ with Apache ActiveMQ.
We have one QM-Manager with 4 queues and 3 channels.
Queues:
OUT (type remote): for sending messages to GOV
QOUT (local type transmission) that is used for OUT
IMP (local): used for receiving from GOV
DLQ: (local): dead letter queue
Channels:
conch: server connection
CUST_GOV: sender
GOV_CUST: receiver
I read a lot about bridging ActiveMQ to Websphere MQ (Client API, Resource Adapter, OSGi) with Camel.
Looks pretty easy with a Camel route, but this is at least a Client-Server setup.
E. G. https://www.shaishavparekh.com/2016/01/wmq-to-amq-bridge/
I need something that hides away the IBM proprietary channel stuff.
Now I found this entry: https://serverfault.com/questions/366743/apache-activemq-server-to-server-connection
As this is from 2012 I would like to ask, if anyone successful switched from Websphere MQ to ActiveMQ resp. is it still true that I can only use Client-Server?
ActiveMQ does not support a server-to-server connection to WebsphereMQ. As you mentioned, Camel would probably be the simplest way to get a connection between the two brokers.
To be clear, even if ActiveMQ did implement a bridge with WebsphereMQ it would almost certainly use the WebsphereMQ client so would fundamentally still be a client-server implementation. It's not really clear from your question why you want to avoid this.
Related
Has anyone succeeded in creating a bridge between IBM MQSeries (MQS) and ActiveMQ Artemis 7.x (AMQ 7) so that the later can send messages to and receive from the first? Currently I have no problem bridging between MQS 7.5 and AMQ 6.3 by deploying a camel route and MQS libraries on the broker itself. However, the same way doesn't work anymore as each route deployment requires a broker reconfiguration and restart.
Thanks in advance for any feedback.
A few examples ship with ActiveMQ Artemis which might be helpful:
The "inter-broker-bridge" example in the examples/features/sub-modules/ directory. This example demonstrates how to deploy an instance of org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl to the broker using Spring in a web application.
The "camel" example in the examples/features/standard/ directory. This example demonstrates how to deploy a Camel route to the broker using Spring in a web application.
I can't speak to whether or not either of these can be updated at runtime as I've not actually attempted that. Both of these options should be able to move messages in either direction (i.e. from Artemis to MQS or from MQS to Artemis).
Another option would simply be to run Camel standalone and deploy your routes there. This would give you more flexibility as it would allow you to specifically choose the hardware where the routes run as well as how many resources the Camel JVM consumes. Running Camel routes directly on the broker, while convenient, isn't a great fit because the broker is a broker and not an application server.
To be clear, ActiveMQ Artemis and IBM MQSeries are not directly compatible with each other and are not expected to be. This true for most (if not all) JMS broker implementations. The role of components like the ActiveMQ Artemis JMS bridge and integration platforms like Camel are to solve the compatibility problem by using a common API to speak to both brokers - JMS in this case. Any broker which implements JMS can be integrated using these methods.
An earlier question on interoperating with MQ Series and a pure open-source solution was answered partly with:
"The one exception is that WebSphere App Server Messaging Engines can interoperate with WMQ. These are pure JMS messaging engines written in Java but they understand the WMQ formats and protocols and appear to WMQ as another QMgr. So if you have WAS you can talk to WMQ without a WMQ client or another QMgr."
(http://stackoverflow.com/questions/18236860/can-we-talk-to-remote-websphere-mqseries-purely-with-non-websphere-mqseries-soft)
The documentation I've read through says that
WebSphere Application Server using WebSphere MQ link can operate with a service integration messaging engine or queue-sharing group.
So as I understand it, if you have WAS and WebSphere MQ link you could connect an WebSphere esb to an exterior MQ Series QMgr and look like a QMgr to that exterior MQ Series QMgr.
Without a WebSphere esb though can WAS act like a MQ QMgr and somehow manage third-party JMS messaging providers like ActiveMQ?
Thanks for any help
I believe you are mixing up capabilities.
WAS can absolutely appear to WMQ as another QMgr when using the WMQ Link. The QMgr appears to WAS in this configuration as another Service Integration Bus.
Service Integration Bus or SIB is the WAS abstraction for a JMS transport provider. It isn't the same thing as IBM's Enterprise Service Bus (ESB) product. Both talk to WMQ but WAS is in no way dependent on the ESB product to do so.
Either WMQ or any other pure JMS transport can be configured in WAS as a Foreign JMS Provider. The administrator points WAS to the JMS classes provided by the transport provider. These can include Active MQ.
There is no concept of WAS seeing WMQ but managing some other transport such as Active MQ. WAS can use normal JMS API calls to interact with Active MQ or any other transport provider. It can also make use of whatever administration API is provided by that transport provider using that provider's administration API. Since both WAS and MQ are IBM products, the integration is a bit tighter between them which is why you can use WMQ natively whereas other JMS transports must be configured as foreign JMS providers.
I have two servers
JBoss as 5.1 with an application sending JMS messages
JBoss AS 7 server with the queue implemented and an MDB consuming messages
I would like to send a message from server one to server two. I would like the message to be consumed on server two.
I think JBoss AS 7 uses HornetQ.
Any hints on how to send a message to a remote queue? I'm more interested on how to send messages because it is on the remote server, and I think the consuming part should be straight forward.
You are correct that JBoss AS 7 uses HornetQ for messaging as the JMS provider. A great resource is the JBoss community documentation for HornetQ. There is also an excellent post on the JBoss community forums about setting up HornetQ across two instances of AS 7.
You will need to define your connectors and acceptors that make up the transports, which in your case will include netty as your client and server are running in different JVMs (otherwise you could use invm). Creating your connection factories will differ on each JBoss AS instance (for example, there is no Management CLI on JBoss AS 5), but the above link will give you a good reference, and you can ask targeted questions in there.
I use JMS (Java Message Service API) in my java application to work with queues/topics residing on websphere MQ. I am looking for a tool/support pac which can show me all MQ Messages being called e.g. when I do queueConnectionFactory.createConnection(), it would have resulted into MQCONN/MQCONNX call, so I need to see what excatly is being passed. So basically during my entire JMS based interaction, I want to see all MQ messages which are being passed to. Is it possible?
if you are using websphere, you can turn on tracing by going to WAS console and tracing service to enable jms logging.
Trace tells you what APIs are being called. To a good extent trace helps. But beyond that call IBM help.
If you are using JMS MQ client mode connection it is possible to run send/receive exits on the MQ SVRCONN channel to log the client MQI and message flows. The free IBM SupportPac MA0Z has this capability. This technique is not possible with a binding mode connection because there is no MQ channel involved.
We have been discussing this at work and now I am even more confused than ever. As far as I understand it a message bridge is used to talk to a queue in a different domain. Is this correct?
From the Weblogic documentation:
The WebLogic Messaging Bridge is a
forwarding mechanism that provides
interoperability between WebLogic JMS
implementations, and between JMS and
other messaging products. Use the
Messaging Bridge to integrate your
messaging applications between:
Any two implementations of WebLogic JMS, including those from separate
releases of WebLogic Server.
WebLogic JMS implementations that reside in separate WebLogic domains.
WebLogic JMS and a third-party JMS product (for example, MQSeries).
So transferring messages between a queue in one domain and a queue in another is an example of one possible use of a message bridge. The source and destination for your bridge can be queues, topics, or distributed destinations.