ranker jms implementation
DESCRIPTION
TRANSCRIPT
Ranker JMS Implementation
Agenda
● Why Event Processing System For Ranker?
● What are challenges?
● General Overview of JMS
● Walk through ActiveMQ
● Why Messaging?
● Other JMS Providers.
Why Messaging?
● Asynchronous operation− A client can schedule work to be done and return immediately− A client can be notified in an event-driven fashion when something has happened
● Loose Coupling− Systems connected via messaging need not be aware of each other, or use the same technologies− Key messages can easily be routed to many systems− Message broker is buffer in case of downtime
Why Messaging?
● Fire and Forget − Message Broker can guarantee messages are recorded and delivered even vs. crashes
● Parallelize Work − Messages in a single stream can be handled in parallel by many client threads or systems
● Throttle Work − A large amount of work can be split into a small number of threads or systems to throttle effort (e.g. due to licensing restrictions)
Why Event Processing System For Ranker?● Ranker has a lot of complicated algorithms running behind
and user really does not need to wait till the execution of all the algorithms.
● You may wish to implement this because the request take a long time to complete or because several parties may be interested in the actual request
● Eg: Crowd ranked/Vote ranked List aggregation (This algorithm may take 1- 5 mts to complete depends of user contribution.)
● Email sending functionality.
● Moderation of user input (eg. Bad word filtering)
● List Auto tagging.
What are the challenges?
● Selecting the JMS provider − We are running the app based on Spring 3.0/Apache tomcat stack, we have to select the appropriate JMS provider. We selected Apache ActiveMQ.
● Reasons for selecting ActiveMQ− Its pretty easy to integrate with Spring Framework.− Open source project.− Pretty good documentation available for ActiveMQ as well as for Integration with spring framework.
What is JMS?
● A specification that describes a common way for Java programs to create, send, receive and read distributed enterprise messages
● Loosely coupled communication● Asynchronous messaging● Reliable delivery
- A message is guaranteed to be delivered once and only once.
● Outside the specification- Security services- Management services
A JMS Application
● JMS Clients- Java programs that send/receive messages
● Messages- Administered Objectspreconfigured JMS objects created by an admin for the use of clients- ConnectionFactory, Destination (queue or topic)
● JMS Provider- messaging system that implements JMS and administrative functionality
JMS Administration
JMS Messaging Domains
● Point-to-Point (PTP)
○ Built around the concept of message queues○ Each message has only one consumer
● Publish-Subscribe systems
○ Uses a “topic” to send and receive messages○ Each message has multiple consumers
Point-to-Point Messaging
Message Consumptions
● Synchronously
○ A subscriber or a receiver explicitly fetches the message from the destination by calling the receive method.
○ The receive method can block until a message arrives or can time out if a message does not arrive within a specified time limit.
● Asynchronously
○ A client can register a message listener with a consumer.
○ Whenever a message arrives at the destination, the JMS provider delivers the message by calling the listener's onMessage() method.
Page 1
JMS Message Types
More JMS Features
● Durable subscription
● By default a subscriber gets only messages published on a topic while a subscriber is alive
● Durable subscription retains messages until a they are received by a subscriber or expire
More JMS Features
Difference Between Persistent & Nonpersistent deliveries
− Persistent delivery take cares of reprocessing the request if the JMS broker restarted before serving the request, it will use file/db to store the request, this implementation is costly compare to non persistent delivery.
− Nonpersistent delivery will just ignore the request if broker restarted while serving the request.
About ActiveMQ
● An open-source message broker (compare to JBossMQ, or many commercial products)
− See http://activemq.apache.org/● Generally stable and high-performance● Can be run standalone, or inside another process, app
server, or Java EE application● Supports everything JMS requires, plus various
extensions● Integrates well into other products
ActiveMQ Message Extensions
● Virtual Destinations (load-balancing and failover for topics)
● Retroactive Subscriptions (subscriber can receive some number of previous messages on connect)
● Exclusive Consumers & Message Groups (loadbalancing and failover while preserving message ordering)
● Mirrored queues (monitor queue messages)
ActiveMQ Client Connectivity
● Dictated by the wire protocol a client uses to talk to the broker
● Generally there are two protocol options – OpenWire (binary) and Stomp (text)− OpenWire is the default and has the most history and best support (including SSL) – for Java, .NET, etc.− Stomp is easiest to develop for and therefore has the most cross-language support (Perl, Python, Ruby, ...)
● Also a variety of other special-purpose protocols (Jabber, adapters for REST/AJAX, etc.)
ActiveMQ Persistence Options
● Different strategies available for storing persistent messages− to local files, database, etc.− or both – stored to local files and then periodically batch undelivered messages to the DB...
● Default implementation changed between ActiveMQ 4.x and 5.x
● May still customize the persistence engine based on specific performance requirements
ActiveMQ SecurityAnd Management
● OpenWire protocol can use SSL for encryption
● Broker can use authentication (e.g. username/password required to connect)− Uses JAAS to identify the back-end user data store (properties files, DB, LDAP, etc.)
● JMX management enabled by default− Use a tool like JConsole to monitor queues, etc.
● Web Console available as well
ActiveMQ Testing
● ActiveMQ can easily run in an embedded, nonpersistent, in-VM only mode for unit tests
● Also easily to run ActiveMQ via beans in a Spring context, if you're testing with Spring
● ActiveMQ includes a simple JNDI provider if you want to test Java EE code that relies on JNDI lookups to access JMS resources
● Can use tools like JMeter to load test the broker
JMS Providers
● SunONE Message Queue (SUN)○ A JMS provider integrated with the SunONE
Application Server○ http://www.sun.com
● MQ JMS (IBM)○ MQSeries is another messaging technology○ Can configure MQ as a JMS provider○ (http://www7b.software.ibm.
com/wsdd/library/techtip/0112_cox.html)
JMS Providers
● WebLogic JMS (BEA)○ Enterprise-class messaging system integrated into
WebLogic Server○ http://dev2dev.bea.com/technologies/jms/index.jsp
● JMSCourier (Codemesh)○ Merging C++ applications into a JMS environment○ http://www.codemesh.
com/en/AlignTechnologyCaseStudy.html
More JMS Vendors
● Fiorano Software http://www.fiorano.com● JRUN Server http://www.allaire.com● GemStone http://www.gemstone.com● Nirvana http://www.pcbsys.com● Oracle http://www.oracle.com● A more exhaustive listing is available at● http://java.sun.com/products/jms/vendors.html