MSMQ client support for linux - queue

I have a use case where MSMQ server is running in our clients infrastructure and we have to receive messages sent by them on the MSMQ queue. I know MSMQ is a windows based system and will work best with windows but is there a way I can just get the messages in Linux ?
Thanks,
Anuj

The typical way to solve it is to bridge to some multi platform messaging product. ActiveMQ, RabbitMQ or whatnot. For that you probably need to write a small bridge service on a Windows server. So that all messages are relayed through "the multi platform broker".

Related

Connecting IBM iSeries to Kafka

We are trying to connect a process within our AS400 to deliver information to a database that is in SQL Server 2016. We have an Apache Kafka server running and ready. What is the best way to connect the i Series to SQL Server using Apache Kafka? in such a way that an RPGLE program can deliver a message subscribed to a specific topic in Kafka.
Should we install something additional? are there open source options?
What should we configure?
I suspect this should probably be closed...
But, I'll throw the following out here....
There's various ways for RPG to interact with REST services
open source HTTP API
IBM's own Integrated Web Services (IWS) client
Db2 built in functionality
various commercial libraries (GETURI for example)
Rather than interact directly from the producing RPGLE program, it's likely a better idea to have the RPG drop a message on a queue and have some background process send it out.
That background process could be all RPG, all Java, or RPG using Java classes.
JTOpen, aka JT400,is the opensource version of the IBM i Toolbox for Java.
If for instance you wanted an all Java process to read from the queue and send a message.
You can even throw Apache Camel into the mix since it supports both a JT400 and Kalfka connector. Here's an example repo of showing Camel running on the IBM i reading from a data queue and sending to Kalfka.

What is the faster and most reliable way of communication between Windows-based C# and Linux-based Java applications?

I have server A which runs under Windows (C#), I have server B which runs under Linux (Java). I need to setup a fast and reliable way of interaction between these two servers.
Requirements:
The size of data is small (many small messages of kbyte or something)
The rate is 1 message per second at least; good to have 1 per ms
The order should be preserved
Persistency not required
Delivery confirmation - yes
Some options out of my head:
Kafka / other messaging systems. The downsize is that I have to use a
middleware in a form of server.
Use Cloud queues from AWS or other cloud service. Can be costly?
Own messaging via TCP messages (very time consuming, I guess there
are open-source alternatives). No middleware.
Somehow via shared filesystem?
Setup Linux Server on Windows and.. what? Any special options if
applications are sharing same host?

Rebus and Remote queues

I'm using Rebus (https://github.com/rebus-org (v.0.83)) and until now it's been all local to a single machine. Now I need to use a remote queue from my website to an app server. It's not abundantly clear to me how to set this up with Rebus. A few questions
I guess I need MSMQ on both machines (web & app) correct? I've configured the web site to UseMsmqInOneWayClientMode;
or is there a way to specify to send it over http?
My configuration looks like this more or less. I'm guessing that inputQUeue needs to point to the local machine not the remote one right?
<rebus inputQueue="mywebqueue" errorQueue="MyErrorQueue#mymachine" workers="1" maxRetries="5">
<endpoints>
<add messages="MyLibrary.CreateMessage, MyLibrary" endpoint="MyQueue#mymachine"/>
</endpoints>
</rebus>
Help would really be appreciated.
Yes. All machines that need to use MSMQ somehow, need to have MSMQ installed. Even as a one-way client, like your webserver, because MSMQ achieves its high availability by providing outgoing queues when you send to remote machines.
I think so. I've never used MSMQ beyond its basic reliable messaging capabilities. Google around, I bet you can find something ;)
Your configuration looks right. And yes - input queues are always local, whereas queues you send to (error queue and all endpoints specified in the endpoint mappings) can be remote too.

What Happens To MSMQ When Network Connection Lost

If I am using MSMQ over the web, what happens if the network connection is lost between client and server?
So can you still add messages to the Queue, and if so where are they stored? In the client app, or in the clients OS etc?
For instance if I have a windows service which is adding items to a queue in a different country. What if the network connection is lost, and the windows service is restarted. Do the messages get lost forever?
The other part of the question relates to the route that a message takes, is it sent directly to the receiving queue, or is it written into a queue on the client side? Does that require MSMQ to be installed on the sending server, and how about licensing for that?
Is there any good documentation to explain the required setup?
Update: Regarding your follow up question. Yes you have to install msmq on the sending server. There aren't any licensing cost, because MSMQ is part of windows and not a separate software (just like the IIS). Here is documentation on "Setting Up a Message Queue" on windwos 2003.
Before Update: Outgoing message are stored in the outgoing queue of the sending server. They are not lost if the sending service is restarted. They will wait in the outgoing queues ( which can be inspected with the msmq manager ) for I don't know how long.
if the msmq service or the sending server are restarted. Then "express" messages will be lost. express or recoverable are properties of non-transcriptional messages.

any MQ services based on email?

I am looking for MQ systems (rabbitmq , activemq) for our programs. Almost all MQ run on ports. I was wondering if there are any MQ systems running on smtp or email services.
Basically I am trying to avoid the hassle of setting up a new software and opening up ports in different firewalls (its a hassle).
RabbitMQ is designed from the ground up to interoperate with other messaging systems: it is the leading implementation of AMQP, the open standard for business messaging, and, through adapters, supports XMPP, SMTP, STOMP and HTTP for lightweight web messaging.
supports SMTP? from: http://www.rabbitmq.com/