Introduction
Message oriented middle-ware is an implementation in which software or hardware infrastructure supports sending and receiving messages between homogeneous /heterogeneous distributed systems.
Typically in N-Tier architecture, a presentation tier communicates with the business layer which in turn communicate with database tier. At the presentation tier, customer-facing applications are made beautifully light weighed so that as rendering can be faster and seamless. These customer-facing thick or think client application shares/access information to/from middle-ware tier by publishing the messages through common formats which each of the connected homogeneous(Vendor1 EMS queue->Vendor1 Ems queue) or Heterogeneous(Vendor1 EMS queue->Vendor2 MQ queue->Vendor1 EMS queue) queues which are subscribed and processed by middleware business logic layer. Middle-ware messaging systems, in turn, accepts the inputs from publishers and implements heavily reusable orchestrated business logic to serve the application purposes.
Message Formats
In Message oriented orchestrated Architecture, the messages can flow in/out through different formats. The publisher may publish in one format, the subscriber may subscribe to the same format and use it as is or can subscribe to the message, convert into compatible format and process further. The subscriber can become again publisher and post the message in a particular format, Another subscriber can accept same or converted format and so on…
HygieneSHOP a Case Study
Let’s take a basic shopping system called “H ygieneSHOP” would be designed to have customer facing thin client (web-based)application functionality and also some thick client (standalone) application functionality areas that would be encompassing back office works. A thin web client application is ported onto a well capable multi/hyperthreaded Vendor Application servers(WebLogic/WebSphere/JBoss). Thick clients are a stand-alone vendor (java/.net) based thick client ported onto individual these systems would also be interacting and interchanging information through MOM( message-oriented middleware ) tier. Say HygieneSHOP is designed with below requirements
Customer Login functionality
As per basic design say customer facing thin client application would enable login functionality.As soon as the customer logs in or logs out application ,it evens out an text /pipe delimited messages stream 2015||03||17||xxx||yyy||..||nnn||… message on login. Point to be noted that application would post message in text- Pipe Delimited format
Customer Order functionality
As part of further product design customer are suppose to navigate and choose product/order. this type of functionality carries very sensitive information like credit card details, etc, hence message formats must be secure soon as Navigate the shopping system place order.Hence as per product specification , as soon as an order is placed , all the required information should be encapsulated and thus events out as binary/base 64bit encoded-encrypted messages stream TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGl” . Point to be noted that same application would post encrypted type of messages which base64bit encoded.
Agent Reporting Functionality
As a part of project requirement, an Agent facing(internal) thick client application would be designed. using the same an agent would log in to the system and would generate a report of purchase. an agent would choose the customer and click on a button Say “customer report” It events out XML messages delimited messages stream like
Customer Admin Khounish order report 10012p_110145 USD
Customer Navigation history: Using same thick client an agent can click in button called “Customer History”. once agent does so, standalone thick client events out JASON messages stream like
{“firstName”: “Khounish”, “lastName”: “dasgupta”, “isAlive”: true, “age”: 25, “height_cm”: 167.6, “address”: { “streetAddress”: “21999 xxx Street”, “city”: “timesquare”, “state”: “NY”, “postalCode”: “10021-3100” }, “phoneNumbers”: [ { “type”: “home”, “number”: “212 555-1234” }, { “type”: “office”, “number”: “646 555-4567” } ], “children”: [], “spouse”: null }