After pondering the results of our message queue shootout, we decided to run with Rabbit MQ. Rabbit ticks all of the boxes, it’s supported (by Spring Source and then VMware ultimately), scales and has the features and performance we need. The RabbitMQ.Client provided by Spring Source is a thin wrapper that quite faithfully exposes the AMQP protocol, so it expects messages as byte arrays.
In a pipes and filters architecture, pipes are connectors or channels. Although at first sight trivial, channels are fairly rich semantically - they allow typing, synchronous and asynchronous input, direct and multicast notifications, send and wait (rendezvous) as well as queued input and wrapping by adapters.
ActiveMQ 5.6 very significant new features that was worth waiting for. Those include a new LevelDB store, MQTT and Stomp 1.1 protocols support and self-balancing cluster clients, to name a few.
This is a useful table found by Mark O'neill that you may find yourself going back to often, comparing pure REST (such as HATEOAS) with the "practical" REST so often found in the field:
A quick discussion of the difference between functional and non-functional requirements, as well as how quality attributes drive software architecture design.
Developing "Real Time Web Applications" has always been painful not matter if the technology used was based on Java Applet, Adobe Flash, Adobe ShockWave, Microsoft Silverlight and the protocol (HTTP, RMI, ...).
Here is a simple unit test to get a feel for how quickly Camel routes add/remove from a JMS queue. You can also get some great AMQ performance stats via JMX to monitor an active system.
Data exchanges between companies have increased a lot. The number of applications, which must be integrated is increasing, too. The interfaces use different technologies, protocols and data formats. This article gives an introduction to Apache Camel including several code examples.
In this article I'll show you how you can implement this algorithm for a Play 2.0 based REST service. If you use a different technology the steps will be pretty much the same way though.
Moving objects from the Spring Integration header can be done using several mechanisms. This tutorial will show you a few ways...
RabbitMQ comes with a nice .NET client called, appropriately enough, ‘RabbitMQ DotNet Client’. It does a good job of implementing the AMQP protocol in .NET and comes with excellent documentation, which is good because there are some interesting subtleties in its usage.
The claim-check model offers configurable storage for message payloads. The advantage in using this Enterprise Integration pattern, compared against header enrichment, is that objects don't have to be packed into the header using a Header Enrichment technique.
The application being discussed has to behave as follows: performs the client authentication, accomplishes request and response operations and forwards notifications asynchronously to the client. The Mina framework fulfills these needs because it was created to be as flexible and easy-fitting as possible in an array of case scenarios.
This is the second part of a high-level ‘architectural vision’ document for a current client. There are three main kinds of components that make up a working system. Services, workflow and endpoints.
Reason 1 : Fuse maintains history of Apache releases, Reason 2 : Javadoc and Schema are well documented, Reason 3...
Here are some additional ways you can measure the time a Gateway takes to call a Web Service and the duration of running a Web Service filter.
FuseSource recently launched the 7.0 a beta release line of our upcoming Fuse Enterprise products. There have been several online sessions reviewing the new features.
I’ve been writing a high-level ‘architectural vision’ document for my current clients. I thought it might be nice to republish bits of it here. This is the section that makes a justification of service oriented architecture based on messaging. Here are some of the resources and conclusions I found when studying SOA...
We will be using Mediation Router to help write a simple integration between a REST endpoint and a resource files on a file system. I’ll be using camel-cxfrs component to expose the REST endpoint and will be using the camel-file component to read a directory on the file system.
Here is a quick guide to setting up a development environment for working on Apache Servicemix projects... You can update some of these versions mentioned in the rundown.
So, how does an API Gateway cater for HATEOAS? A key requirement is not to break it. As in medicine, "first do no harm". Consider what an API Gateway does: It provides external-facing APIs to the public, then translates them to back-end (usually on-premise) API calls. Check out the following JSON returned by a server to the client.
It's pretty straight forward to take a message, use an SI header enricher construct and place the message in the header using a SpEL expression - in fact one for the header key name and one for the payload extraction. The following SI flow demonstrates an example of how to do just that.
Here are some notes on adding Camel exception handling to a JavaDSL route. There are various approaches/options available. These notes cover the important distinctions between approaches...
SoapUI is de-facto number 1 tool for testing SOA services. This article shows how to run SoapUI tests from Ant/Ivy script. It's useful for automated testing of your services.
Although I know that RabbitMQ has the shovel plugin which can bridge between Rabbit instances I've yet not found a good plugin for JMS <-> AMQP forwarding.
The first thing that came to my mind was to utilize a Spring Integration mediation as SI has excellent support for both JMS and Rabbit.