CXF webservices (SOAP/JMS) using RabbitMQ - web-services

I have a CXF webservice which is supporting SOAP over JMS, where I have used ActiveMQ as message broker system. The soap messages are sent to the request queue and soap responses are sent back to reply queue. Now I am planning to replace RabbitMQ with ActiveMQ. But the issue I am facing is that RabbitMQ doesn't implement JMS APIs. Can we use RabbitMQ for SOAP/JMS webservices?
Note: I am using org.apache.cxf.transport.jms.JMSConfigFeature as jaxws:features in the spring config file.

As you state, RabbitMQ does not support JMS so the simple answer is no, you can't do SOAP over JMS with RabbitMQ.
However, Pivotal has a (commercial) JMS library connector implementation for RabbitMQ that should make it possible.

Related

Using wso2dss as AMQP consumer

I am using RabbitMq as my message queue and I have to use AMQP protocol in my application. I am publishing messages to my queues in RabbitMq and consume the messages using nodejs client. As an enhancement I want to omit the nodejs consumer client and replace it with WSO2 Data Service Server, since currently the nodejs client calls the services hosted on wso2-dss, after fetching them from queue.
I searched a lot and I didn't find proper way to do this without using wso2-esb. I may be able to solve my problem with qpid client, but I really need help.
Please go through https://docs.wso2.com/display/ESB490/RabbitMQ+AMQP+Transport and http://itsmaheeka.blogspot.com/2015/09/esb-490-enhanced-rabbitmq-support.html to get an idea about RabbitMq transport.ESB provides inbuilt RabbitMq transport But for DSS you may have to install required features.
You can directly use the DSS JMS transport[1] to achieve this, because RabbitMQ support JMS.
[1] https://docs.wso2.com/display/DSS350/JMS+Transport

Can WSO2 MB handle HTTP requests?

I've been working with WSO2 Message Broker in order to publish and consume messages through jms and other clients. I've gone through the official documentation including the samples.
What I want to know is that, is it possible for WSO2 MB to handle http requests directly instead of jms. Yes you can do something like this, by converting http to jms through WSO2 ESB which seems like a long process.
ie: I mean having http as the end point or the transport to publish and consume messages directly in WSO2 Message Broker.
In order to achieve this, you will have to use ESB + MB set up as explained at [1]. What you can do is to use ESB to wrap JMS functionality using a HTTP client. It is recommended to use ESB externally in a separate JVM when using this setup.
[1] http://wso2.com/library/articles/2013/03/configuring-wso2-esb-wso2-message-broker/
Regards,
Pubudu.

Does REST web service has broker?

In SOAP, I see that there is a broker for orchestrating the connections between components. I want to know that is there a similar broker in REST?
There is no broker in SOAP, as long as somebody introduces one between the components (consumer, provider). SOAP is just a protocol. It can be used without a broker/ESB, for instance with direct http connections.
The same applies for REST.

How to call web service Asynchronously in Tibco BW?

I am able to call web service synchronously in tibco BW using SOAP Request Reply but unable to call asynchronously.
Can anyone please help me how to call web service asynchronously in tibco.
Asynchronous web service calls is accomplished using SOAP over JMS. A SOAP/JMS binding must be declared in the WSDL and the web service provider must be listening on the associated queue or topic.
You can use the SOAP Request Reply activity to call a web service over JMS.
It depends on the transport, if you use a HTTP transport you must always wait for a response. Waiting for a HTTP response doesn't mean you have to execute the functionality at that moment, if you are able to save the request at server side you may response with just a 200, the response could event be blank. If you use JMS transport, it will provide loosly coupling in time, that means, the point in time when an action is requested does not have to be the same as when the server process the action. If you plan to use the service under heavy load, jms transport is preferred as it is non-blocking, and use of hardware resources is more predictible.
Webservices may define in the wsdls http transport, jms transport or even both at the same time.
If the WSDL does not have response message, then the SoapRequestReply will not wait for response and will work asynchronously.
In Asynchronously communication client or request input will do it's work without waiting for response instantaneously after sending the message.
We can use SOAP over JMS to accomplish Asynchronous web service calls. A SOAP/JMS binding must be stated in the WSDL and the web service provider must be listening on the related queue or topic. We can utilize the SOAP Request Reply activity to call a web service over JMS.
If you utilizing JMS transport, it will give loosely coupling in time, that means, the point in time when an action is requested does not have to be the same as when the server process the action. If you are planning to utilize the service under heavy load, JMS transport is preferred as it is non-blocking, and use of hardware resources is more predictable.

SOAP over JMS for starters

We have a web service which has been running on SOAP over HTTP using Apache CXF, and needs to be switched to SOAP over JMS. This is relatively new grounds for me and the internet didn't seem to give all the answers for me, or i couldn't understand much of it.
It would be really helpful if anyone of the experienced veterans explain the steps to get this conversion from HTTP ot JMS (in simple english which you guys do best) so that i could understand and implement it.
Also would like to get any info on checking if the SOAP over JMS is transparent (whether we could monitor the request & response).
Thanks in advance and cheers!!
The Internet can provide plenty of examples. Here is something to start:
SOAP over JMS by CXF and Advanced CXF configuration for JMS
The move from WS inbound call to JMS inbound message is quite transparent.
Simple high-level steps (in simple English to start with):
(a) Setup your JMS server
make sure it works by testing it - send messages to it using OpenJMS, Hermes, or some other client.
(b) In the CXF setup the connection to the JMS server and specific Queue
(c) Inbound messages: in your code, create an MDB (MessageDrivenBean) class, which is linked to the CXF connection setup
(d) Outboud messages: in your code, define a controller which uses the Context of CXF to get the connection and session to the JMS - and can send a message using them.
I'll be happy to hear how it goes.