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 Objects
    preconfigured 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

Ranker jms implementation

  • 1.
  • 2.
    Agenda ● Why EventProcessing System For Ranker? ● What are challenges? ● General Overview of JMS ● Walk through ActiveMQ ● Why Messaging? ● Other JMS Providers.
  • 3.
    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
  • 4.
    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)
  • 5.
    Why Event ProcessingSystem 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.
  • 6.
    What are thechallenges? ● 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.
  • 7.
    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
  • 8.
    A JMS Application ● JMS Clients - Java programs that send/receive messages ● Messages - Administered Objects preconfigured 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
  • 9.
  • 10.
    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
  • 11.
  • 13.
    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.
  • 14.
  • 15.
  • 16.
    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
  • 17.
    More JMS Features DifferenceBetween 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.
  • 18.
    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
  • 19.
    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)
  • 20.
    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.)
  • 21.
    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
  • 22.
    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
  • 23.
    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
  • 24.
    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)
  • 25.
    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
  • 26.
    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