SlideShare une entreprise Scribd logo
1  sur  75
Télécharger pour lire hors ligne
Real World Messaging
With Apache ActiveMQ
    Bruce Snyder
    bsnyder@apache.org
    7 Nov 2008
    New Orleans, Louisiana
Do You Use JMS?




                  2
Agenda

• Common questions
• ActiveMQ features




                      3
What is ActiveMQ?

• Message-oriented middleware
• Apache project
  – http://activemq.apache.org/
• Apache licensed
• JMS 1.1 compliant
• Goal:
  – Standards-based, message-oriented application
    integration across many languages and platforms


                                             4
What kind of hardware is
needed for a throughput of
X number of messages per
         second?



                       5
What Are Your
Performance Objectives?




                     6
What Trade-Offs
Can You Accept?




                  7
Common Trade-Offs


•   Messaging Domain
•   Durability v. Persistence
•   Message acks v. transactions
•   Message consumption types




                                   8
Messaging Domains

• Do all consumers need a copy of the
  messages?
• What if consumers are disconnected?
• Can consumers deal with missing
  messages?
• Do you need request/reply messaging?



                                  9
Durability v. Persistence

• What quality of service do you need?

  – Durability - should messages be held while
    consumer is offline?


  – Persistence - used to preserve messages in
    the event of a JMS provider failure



                                          10
Message Acks v.
          Transactions
• When messages are received, the
  consumer must acknowledge the
  message
  – There is no unacknowledge!


• Transactions allow for:
  – Rollback for error handling
  – Batching for speed


                                    11
Synchronous Message
        Consumption
public class MyConsumer {
...

public void doCreateConsumer() {

    Destination destination =
      consumer.getSession().createQueue(quot;JOBS.quot; + job);

    MessageConsumer messageConsumer =
       consumer.getSession().createConsumer(destination);

    while ((message = consumer.receive(timeout)) != null) {
      processMessage(message);
    }
}

...
}




                                                              12
Asynchronous Message
    Consumption
public class MyConsumer {
...

public void doCreateConsumer() {

    Destination destination =
      consumer.getSession().createQueue(quot;JOBS.quot; + job);

    MessageConsumer messageConsumer =
       consumer.getSession().createConsumer(destination);

    messageConsumer.setMessageListener(new MyMessageListener(job));
}

...
}




                                                               13
How can the broker be
    clustered to improve
   scalability or guarantee
        availability?
• Let’s talk about two features
  – Network of brokers
  – Master/slave




                                  14
Broker Options

•   Connectors
•   Persistence
•   Master/slave
•   Security




                            15
Two Types of Transports




                     16
Transport Connectors

• Client-to-broker connections
  – Similar to JDBC connections to a database
• Various protocols are supported:
  – VM
  – TCP
  – NIO
  – UDP
  – SSL
  – HTTP/S
                                          17
Clients Should Be
    Configured For Failover
• Use the failover protocol:

failover:(tcp://broker1:61616,tcp://broker2:61616, 
tcp://broker3:61616)?initialReconnectDelay=100




                                                   18
Network of Brokers

• Broker-to-broker connections
• Various protocols supported:
  – Static
  – Failover
  – Multicast
  – Zeroconf
  – Peer
  – Fanout
  – Discovery
                                 19
Networks of Brokers

• Provides large scalability
• ActiveMQ store-and-forward allows
  messages to traverse brokers
  – Demand-based forwarding
  – Some people call this distributed queues
• Many possible configurations or
  topologies are supported


                                           20
Topology Example




                   21
Topology Example




                   22
Topology Example




                   23
Topology Example




                   24
Topology Example




                   25
Master/Slave
Broker Configurations




                    26
Three Types of
          Master/Slave
• Pure master/slave
• Shared filesystem master/slave
• JDBC master/slave




                                   27
Pure Master/Slave

• Shared nothing, fully replicated topology
  – Does not depend on shared filesystem or
    database
• A Slave broker consumes all message
  states from the Master broker
  (messages, acks, tx states)
• Slave does not start any networking or
  transport connectors

                                         28
Pure Master/Slave

• Master broker will only respond to client
  when a message exchange has been
  successfully passed to the slave broker




                                        29
Pure Master/Slave

• If the master fails, the slave optionally
  has two modes of operation:
  – Start up all it’s network and transport
    connectors
     • All clients connected to failed Master resume
       on Slave
  – Close down completely
     • Slave is simply used to duplicate state from
       Master


                                                30
Shared Filesystem
         Master/Slave
• Utilizes a directory on a shared
  filesystem
• No restriction on number of brokers
• Simple configuration (point to the data
  dir)
• One master selected at random



                                     31
JDBC Master/Slave

• Recommended when using a shared
  database
• No restriction on the number of brokers
• Simple configuration
• Clustered database negates single
  point of failure
• One master selected at random


                                    32
Client Connectivity
       With Master/Slave
• Clients should use failover transport:

     failover://(tcp://masterhost:61616, 
       tcp://slavehost:61616)?randomize=false




                                                33
How can the broker be
    clustered to improve
   scalability or guarantee
        availability?
• Create a network of brokers
• Use master/slave for broker failover




                                     34
High Availability and
         Fault Tolerance
•   RAIDed disks
•   A Storage Area Network
•   Clustered relational databases
•   Clustered JDBC via C-JDBC
    – http://c-jdbc.objectweb.org/




                                     35
What's the real difference
   between message
 persistence strategies?




                       36
AMQ Message Store

• Transactional message storage solution
• Fast and reliable
• Composed of two parts:
  – Data Store - holds messages in a transactional
    journal
  – Reference store - stores message locations for
    fast retrieval
• The default message store in ActiveMQ 5

                                           37
Non-Journaled JDBC

• Transactional message storage solution
• Reliable but not fast
  – JDBC connection overhead is prohibitively
    slow




                                          38
Journaled JDBC

• Transactional message storage solution
• Reliable and faster than non-journaled
• Two-piece store
  – Journal - A high-performance, transactional
    journal
  – Database - A relational database of your
    choice
• Default database in ActiveMQ 4.x is
  Apache Derby
                                            39
Message Cursors

• Messages are no longer stored in
  memory
  – Previous to 5.1, message references were
    stored in memory
• Messages are paged in from storage
  when space is available in memory




                                         40
What security options are
        available?


• Authentication
  – I.e., are you allowed to connect to ActiveMQ?
• Authorization
  – I.e., do you have permission to use that
    ActiveMQ resource?


                                               41
Authentication

• File based
• JAAS based




                         42
Authorization

• Destination level
• Message level via custom plugin




                                    43
What's the best way to
 connect non-Java clients?


• Let’s talk about wire formats




                                  44
Wire Formats

• OpenWire
  – The default in ActiveMQ; a binary protocol
• STOMP
  – Simple Text Oriented Messaging Protocol; a text based protocol
• XMPP
   – The Jabber XML protocol
• REST
  – HTTP POST and GET
• AMQP
  – Not yet fully supported


                                                          45
OpenWire

• A binary wire level protocol for
  marshaling objects to/from byte arrays
• Designed for performance
  – Sacrificed some ease of implementation
• Clients for C++, Java and .NET
  – The default is Java




                                             46
STOMP

• A text-based wire level protocol
• Designed to be very easy to understand
  – Encourages implementation in additional
    languages
• Can be easily demonstrated via telnet
• Clients for C, Javascript, Perl, PHP,
  Python, Ruby and more


                                          47
What's the best approach if
 a producer or consumer
     may be down for
        some time?




                       48
Use the failover Protocol
• Utilize the failover options
   – initialReconnectDelay - wait before reconnect
   – maxReconnectDelay - max time between reconnects
   – useExponentialBackOff - exponentially grow time between
     reconnects
   – backOffMultiplier - multiplier for backoff
   – maxReconnectAttempts - max number of reconnects
   – randomize - randomly choose from list of brokers
   – backup - start and hold a hot standby connection




                                                     49
Use Producer Flow Control

• Prevents slow consumers from being
  flooded

        ...
        <destinationPolicy>
          <policyMap>
            <policyEntries>
              <policyEntry topic=quot;FOO.>quot;
                    producerFlowControl=quot;falsequot;
                    memoryLimit=quot;128mbquot;>
            </policyEntries>
          </policyMap>
        </destinationPolicy>
        ...



                                                  50
Use Message Persistence

• Quality of service to preserve messages
  in the event of broker failure




                                    51
Consumer Options

• Message prefetch
•   Consumer dispatch async
•   Exclusive consumer
•   Consumer priority
•   Message groups
•   Redeliery policies
•   Retroactive consumer
•   Selectors
•   Some slow consumer strategies

                                    52
Message Prefetch

• Used for slow consumer situations
  – Consumer is flooded by messages from the broker
• FIFO buffer on the consumer side




                                               53
Async Dispatch

• Asynchronous message delivery to
  consumers
  – Default is true
• Useful for slow consumers
  – Incurs a bit of overhead




                                     54
Exclusive Consumers

• Anytime more than one consumer is consuming
  from a queue, message order is lost
• Allows a single consumer to consume all
  messages on a queue to maintain message
  ordering




                                        55
Consumer Priority

• Just like it sounds
  – Gives a consumer priority for message delivery
  – Allows for the weighting of consumers to optimize
    network traversal for message delivery




                                              56
Message Groups

• Uses the JMSXGroupID property to define which
  message group a message belongs
  – Guarantees ordered processing of related messages across a
    single destination
  – Load balancing of message processing across multiple
    consumers
  – HA/failover if consumer goes down




                                                        57
Redelivery Policy

• Messages are redelivered to a client
  when:
  – A transacted session is rolled back
  – A transacted session is closed before commit
  – A session is using CLIENT_ACKNOWLEDGE
    and Session.recover() is explicitly called




                                          58
Retroactive Consumer

• Message replay at start of a subscription
  – At the start of every subscription, send any old
    messages that the consumer may have missed
  – Configurable via policies




                                               59
Wildcards on Destinations

• Price.>
• Price.Stock.>
• Price.Stock.NASDAQ.*
• Price.Stock.*.IBM

            ...
            <destinationPolicy>
              <policyMap>
                <policyEntries>
                  <policyEntry topic=quot;Price.Stock.>quot;
                        memoryLimit=quot;128mbquot;>
                </policyEntries>
              </policyMap>
            </destinationPolicy>
            ...
                                                       60
Selectors

• Used to attach a filter to a subscription
• Defined using a subset SQL 92 syntax
• JMS selectors
   – Filters only message properties
      • JMSType = ‘stock’ and trader = ‘bob’ and price < ‘105’
• XPath selectors
   – Filters message bodies that contain XML
      • ‘/message/cheese/text() = 'swiss'’




                                                            61
Slow Consumers
   Strategies




                 62
Slow Consumer Strategies

• Various configurable strategies for handling
  slow consumers
• Slow consumer situations are very common
• Caused by:
  –   Slow network connections
  –   Unreliable network connections
  –   Busy network situations
  –   Busy JVM situations
  –   Half disconnects with sockets

                                         63
Use Message Limit
           Strategies
• PendingMessageLimitStrategy
  – Calculates the max number of pending messages
    to be held in memory for a consumer above its
    prefetch size
• ConstantPendingMessageLimitStrategy
  – A constant limit for all consumers
• PrefetchRatePendingMessageLimitStrategy
  – Calculates the max number of pending messages
    using a multiplier of the consumers prefetch size


                                              64
Use Prefetch and
         an Eviction Policy
• Use the prefetch policy
  – The prefetch policy has a property named
    maximumPendingMessageLimit that can be used on
    a per connection or per consumer basis
• Use a message eviction policy
  – oldestMessageEvictionStrategy - Evict the oldest
    messages first
  – oldestMessageWithLowestPriorityEvictionStrategy -
    Evict the oldest messages with the lowest priority first



                                                     65
Use Destination Policies

• Configured on the destination policies in
  the ActiveMQ XML configuration file
• Combined with wildcards, this is very
  powerful




                                        66
Additional Tips

• Consider configuring message cursors
• The status of slow consumers can be monitored via
  JMX properties
  – discarded - The count of how many messages have been
    discarded during the lifetime of the subscription due to it being a
    slow consumer
  – matched - The current number of messages matched and to be
    dispatched to the subscription as soon as some capacity is
    available in the prefetch buffer. So a non-zero value implies that
    the prefetch buffer is full for this subscription




                                                              67
How to monitor individual
 messages, queue depths,
 or other broker statistics?

• JMX
• ActiveMQ web console
• Additional consumers
   – Camel routes
• SpringSource AMS
   – Based on Hyperic
• IONA FuseHQ
                         68
   – Based on Hyperic
What is Apache Camel?




 http://activemq.apache.org/camel/
Camel Components
Fluent Java API

RouteBuilder MyRoute = new RouteBuilder() {
   public void configure() {
     from(quot;activemq:TEST.QUEUEquot;).
          to(quot;file:///Users/bsnyder/camelinbox/text.txtquot;).
          to(quot;log:MyLogquot;);
   }
};
XML Config

<camelContext id=quot;camelquot;
  xmlns=quot;http://activemq.apache.org/camel/schema/springquot;>
  <package>com.mycompany</package>
  <route>
    <from uri=quot;activemq:example.Aquot; />
    <to uri=quot;file:///Users/bsnyder/camelinbox/text.txtquot; />
    <to uri=”log:MyLog?showProperties=true” />
  </route>
</camelContext>
Information Overload Yet?
Thank You For Attending!




 Questions?

Contenu connexe

Tendances

Enterprise Messaging with Apache ActiveMQ
Enterprise Messaging with Apache ActiveMQEnterprise Messaging with Apache ActiveMQ
Enterprise Messaging with Apache ActiveMQ
elliando dias
 
AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ
AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQAMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ
AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ
Microsoft
 

Tendances (20)

The RabbitMQ Message Broker
The RabbitMQ Message BrokerThe RabbitMQ Message Broker
The RabbitMQ Message Broker
 
Using ibm mq in managed file transfer environments final
Using ibm mq in managed file transfer environments finalUsing ibm mq in managed file transfer environments final
Using ibm mq in managed file transfer environments final
 
Zookeeper Introduce
Zookeeper IntroduceZookeeper Introduce
Zookeeper Introduce
 
Introduction To RabbitMQ
Introduction To RabbitMQIntroduction To RabbitMQ
Introduction To RabbitMQ
 
Apache Pulsar Development 101 with Python
Apache Pulsar Development 101 with PythonApache Pulsar Development 101 with Python
Apache Pulsar Development 101 with Python
 
Kafka with IBM Event Streams - Technical Presentation
Kafka with IBM Event Streams - Technical PresentationKafka with IBM Event Streams - Technical Presentation
Kafka with IBM Event Streams - Technical Presentation
 
IBM MQ Disaster Recovery
IBM MQ Disaster RecoveryIBM MQ Disaster Recovery
IBM MQ Disaster Recovery
 
Enterprise Messaging with Apache ActiveMQ
Enterprise Messaging with Apache ActiveMQEnterprise Messaging with Apache ActiveMQ
Enterprise Messaging with Apache ActiveMQ
 
Rabbitmq basics
Rabbitmq basicsRabbitmq basics
Rabbitmq basics
 
AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ
AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQAMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ
AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ
 
IBM MQ Overview (IBM Message Queue)
IBM MQ Overview (IBM Message Queue)IBM MQ Overview (IBM Message Queue)
IBM MQ Overview (IBM Message Queue)
 
Paxos
PaxosPaxos
Paxos
 
IBM MQ V9 Overview
IBM MQ V9 OverviewIBM MQ V9 Overview
IBM MQ V9 Overview
 
IBM MQ cloud architecture blueprint
IBM MQ cloud architecture blueprintIBM MQ cloud architecture blueprint
IBM MQ cloud architecture blueprint
 
Fault tolerant and scalable ibm mq
Fault tolerant and scalable ibm mqFault tolerant and scalable ibm mq
Fault tolerant and scalable ibm mq
 
What is RabbitMQ ?
What is RabbitMQ ?What is RabbitMQ ?
What is RabbitMQ ?
 
Overview of Microsoft Exchange Server
Overview of Microsoft Exchange ServerOverview of Microsoft Exchange Server
Overview of Microsoft Exchange Server
 
Clustering, Server setup and Hybrid deployment setup using Anypoint Runtime M...
Clustering, Server setup and Hybrid deployment setup using Anypoint Runtime M...Clustering, Server setup and Hybrid deployment setup using Anypoint Runtime M...
Clustering, Server setup and Hybrid deployment setup using Anypoint Runtime M...
 
Introduction to Apache Camel
Introduction to Apache CamelIntroduction to Apache Camel
Introduction to Apache Camel
 
Building a Highly available messaging hub using the IBM MQ Appliance
Building a Highly available messaging hub using the IBM MQ ApplianceBuilding a Highly available messaging hub using the IBM MQ Appliance
Building a Highly available messaging hub using the IBM MQ Appliance
 

Similaire à Messaging With ActiveMQ

Enterprise Messaging With ActiveMQ and Spring JMS
Enterprise Messaging With ActiveMQ and Spring JMSEnterprise Messaging With ActiveMQ and Spring JMS
Enterprise Messaging With ActiveMQ and Spring JMS
Bruce Snyder
 
Messaging With Apache ActiveMQ
Messaging With Apache ActiveMQMessaging With Apache ActiveMQ
Messaging With Apache ActiveMQ
Bruce Snyder
 
Distributed Caching Essential Lessons (Ts 1402)
Distributed Caching   Essential Lessons (Ts 1402)Distributed Caching   Essential Lessons (Ts 1402)
Distributed Caching Essential Lessons (Ts 1402)
Yury Kaliaha
 
Xen_and_Rails_deployment
Xen_and_Rails_deploymentXen_and_Rails_deployment
Xen_and_Rails_deployment
Abhishek Singh
 
Deploying flash storage for Ceph without compromising performance
Deploying flash storage for Ceph without compromising performance Deploying flash storage for Ceph without compromising performance
Deploying flash storage for Ceph without compromising performance
Ceph Community
 
Scalarea Aplicatiilor Web - 2009
Scalarea Aplicatiilor Web - 2009Scalarea Aplicatiilor Web - 2009
Scalarea Aplicatiilor Web - 2009
Andrei Gheorghe
 

Similaire à Messaging With ActiveMQ (20)

Enterprise Messaging With ActiveMQ and Spring JMS
Enterprise Messaging With ActiveMQ and Spring JMSEnterprise Messaging With ActiveMQ and Spring JMS
Enterprise Messaging With ActiveMQ and Spring JMS
 
Messaging With Apache ActiveMQ
Messaging With Apache ActiveMQMessaging With Apache ActiveMQ
Messaging With Apache ActiveMQ
 
AP4R on RubyKaigi2007 (English only)
AP4R on RubyKaigi2007 (English only)AP4R on RubyKaigi2007 (English only)
AP4R on RubyKaigi2007 (English only)
 
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE Platforms
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE PlatformsFIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE Platforms
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE Platforms
 
Solving the C20K problem: Raising the bar in PHP Performance and Scalability
Solving the C20K problem: Raising the bar in PHP Performance and ScalabilitySolving the C20K problem: Raising the bar in PHP Performance and Scalability
Solving the C20K problem: Raising the bar in PHP Performance and Scalability
 
Distributed Caching Essential Lessons (Ts 1402)
Distributed Caching   Essential Lessons (Ts 1402)Distributed Caching   Essential Lessons (Ts 1402)
Distributed Caching Essential Lessons (Ts 1402)
 
Instant J Chem: one-stop information hub for medicinal chemists: US UGM 2008
Instant J Chem: one-stop information hub for medicinal chemists: US UGM 2008Instant J Chem: one-stop information hub for medicinal chemists: US UGM 2008
Instant J Chem: one-stop information hub for medicinal chemists: US UGM 2008
 
Open Mq Intro
Open Mq IntroOpen Mq Intro
Open Mq Intro
 
Non-Kafkaesque Apache Kafka - Yottabyte 2018
Non-Kafkaesque Apache Kafka - Yottabyte 2018Non-Kafkaesque Apache Kafka - Yottabyte 2018
Non-Kafkaesque Apache Kafka - Yottabyte 2018
 
AP4R on RubyConf2007
AP4R on RubyConf2007AP4R on RubyConf2007
AP4R on RubyConf2007
 
Open Source Integration with WSO2 Enterprise Service Bus
Open Source Integration  with  WSO2 Enterprise Service BusOpen Source Integration  with  WSO2 Enterprise Service Bus
Open Source Integration with WSO2 Enterprise Service Bus
 
Connecting applicationswitha mq
Connecting applicationswitha mqConnecting applicationswitha mq
Connecting applicationswitha mq
 
Xen_and_Rails_deployment
Xen_and_Rails_deploymentXen_and_Rails_deployment
Xen_and_Rails_deployment
 
Docker Swarm secrets for creating great FIWARE platforms
Docker Swarm secrets for creating great FIWARE platformsDocker Swarm secrets for creating great FIWARE platforms
Docker Swarm secrets for creating great FIWARE platforms
 
Lightweight Grids With Terracotta
Lightweight Grids With TerracottaLightweight Grids With Terracotta
Lightweight Grids With Terracotta
 
Jms deep dive [con4864]
Jms deep dive [con4864]Jms deep dive [con4864]
Jms deep dive [con4864]
 
Deploying flash storage for Ceph without compromising performance
Deploying flash storage for Ceph without compromising performance Deploying flash storage for Ceph without compromising performance
Deploying flash storage for Ceph without compromising performance
 
Scalarea Aplicatiilor Web - 2009
Scalarea Aplicatiilor Web - 2009Scalarea Aplicatiilor Web - 2009
Scalarea Aplicatiilor Web - 2009
 
Acus08 Advanced Load Balancing Apache2.2
Acus08 Advanced Load Balancing Apache2.2Acus08 Advanced Load Balancing Apache2.2
Acus08 Advanced Load Balancing Apache2.2
 
Gear6 and Scaling Website Performance: Caching Session and Profile Data with...
Gear6 and Scaling Website Performance:  Caching Session and Profile Data with...Gear6 and Scaling Website Performance:  Caching Session and Profile Data with...
Gear6 and Scaling Website Performance: Caching Session and Profile Data with...
 

Plus de Bruce Snyder

Beyond Horizontal Scalability: Concurrency and Messaging Using Spring
Beyond Horizontal Scalability: Concurrency and Messaging Using SpringBeyond Horizontal Scalability: Concurrency and Messaging Using Spring
Beyond Horizontal Scalability: Concurrency and Messaging Using Spring
Bruce Snyder
 
Enterprise Messaging With Spring JMS
Enterprise Messaging With Spring JMSEnterprise Messaging With Spring JMS
Enterprise Messaging With Spring JMS
Bruce Snyder
 
Styles of Applicaton Integration Using Spring
Styles of Applicaton Integration Using SpringStyles of Applicaton Integration Using Spring
Styles of Applicaton Integration Using Spring
Bruce Snyder
 
ActiveMQ In Action
ActiveMQ In ActionActiveMQ In Action
ActiveMQ In Action
Bruce Snyder
 
ActiveMQ In Action - ApacheCon 2011
ActiveMQ In Action - ApacheCon 2011ActiveMQ In Action - ApacheCon 2011
ActiveMQ In Action - ApacheCon 2011
Bruce Snyder
 
Using Enterprise Integration Patterns as Your Camel Jockey
Using Enterprise Integration Patterns as Your Camel JockeyUsing Enterprise Integration Patterns as Your Camel Jockey
Using Enterprise Integration Patterns as Your Camel Jockey
Bruce Snyder
 
Apache ActiveMQ and Apache ServiceMix
Apache ActiveMQ and Apache ServiceMixApache ActiveMQ and Apache ServiceMix
Apache ActiveMQ and Apache ServiceMix
Bruce Snyder
 
Service-Oriented Integration With Apache ServiceMix
Service-Oriented Integration With Apache ServiceMixService-Oriented Integration With Apache ServiceMix
Service-Oriented Integration With Apache ServiceMix
Bruce Snyder
 
Taking Apache Camel For a Ride
Taking Apache Camel For a RideTaking Apache Camel For a Ride
Taking Apache Camel For a Ride
Bruce Snyder
 

Plus de Bruce Snyder (13)

Beyond Horizontal Scalability: Concurrency and Messaging Using Spring
Beyond Horizontal Scalability: Concurrency and Messaging Using SpringBeyond Horizontal Scalability: Concurrency and Messaging Using Spring
Beyond Horizontal Scalability: Concurrency and Messaging Using Spring
 
Enterprise Messaging With Spring JMS
Enterprise Messaging With Spring JMSEnterprise Messaging With Spring JMS
Enterprise Messaging With Spring JMS
 
Styles of Applicaton Integration Using Spring
Styles of Applicaton Integration Using SpringStyles of Applicaton Integration Using Spring
Styles of Applicaton Integration Using Spring
 
ActiveMQ In Action
ActiveMQ In ActionActiveMQ In Action
ActiveMQ In Action
 
ActiveMQ In Action - ApacheCon 2011
ActiveMQ In Action - ApacheCon 2011ActiveMQ In Action - ApacheCon 2011
ActiveMQ In Action - ApacheCon 2011
 
Using Enterprise Integration Patterns as Your Camel Jockey
Using Enterprise Integration Patterns as Your Camel JockeyUsing Enterprise Integration Patterns as Your Camel Jockey
Using Enterprise Integration Patterns as Your Camel Jockey
 
Apache ActiveMQ and Apache ServiceMix
Apache ActiveMQ and Apache ServiceMixApache ActiveMQ and Apache ServiceMix
Apache ActiveMQ and Apache ServiceMix
 
Service-Oriented Integration With Apache ServiceMix
Service-Oriented Integration With Apache ServiceMixService-Oriented Integration With Apache ServiceMix
Service-Oriented Integration With Apache ServiceMix
 
Taking Apache Camel For a Ride
Taking Apache Camel For a RideTaking Apache Camel For a Ride
Taking Apache Camel For a Ride
 
EIP In Practice
EIP In PracticeEIP In Practice
EIP In Practice
 
Service Oriented Integration With ServiceMix
Service Oriented Integration With ServiceMixService Oriented Integration With ServiceMix
Service Oriented Integration With ServiceMix
 
Taking Apache Camel For A Ride
Taking Apache Camel For A RideTaking Apache Camel For A Ride
Taking Apache Camel For A Ride
 
Taking Apache Camel For A Ride
Taking Apache Camel For A RideTaking Apache Camel For A Ride
Taking Apache Camel For A Ride
 

Dernier

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Dernier (20)

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 

Messaging With ActiveMQ

  • 1. Real World Messaging With Apache ActiveMQ Bruce Snyder bsnyder@apache.org 7 Nov 2008 New Orleans, Louisiana
  • 2. Do You Use JMS? 2
  • 3. Agenda • Common questions • ActiveMQ features 3
  • 4. What is ActiveMQ? • Message-oriented middleware • Apache project – http://activemq.apache.org/ • Apache licensed • JMS 1.1 compliant • Goal: – Standards-based, message-oriented application integration across many languages and platforms 4
  • 5. What kind of hardware is needed for a throughput of X number of messages per second? 5
  • 8. Common Trade-Offs • Messaging Domain • Durability v. Persistence • Message acks v. transactions • Message consumption types 8
  • 9. Messaging Domains • Do all consumers need a copy of the messages? • What if consumers are disconnected? • Can consumers deal with missing messages? • Do you need request/reply messaging? 9
  • 10. Durability v. Persistence • What quality of service do you need? – Durability - should messages be held while consumer is offline? – Persistence - used to preserve messages in the event of a JMS provider failure 10
  • 11. Message Acks v. Transactions • When messages are received, the consumer must acknowledge the message – There is no unacknowledge! • Transactions allow for: – Rollback for error handling – Batching for speed 11
  • 12. Synchronous Message Consumption public class MyConsumer { ... public void doCreateConsumer() { Destination destination = consumer.getSession().createQueue(quot;JOBS.quot; + job); MessageConsumer messageConsumer = consumer.getSession().createConsumer(destination); while ((message = consumer.receive(timeout)) != null) { processMessage(message); } } ... } 12
  • 13. Asynchronous Message Consumption public class MyConsumer { ... public void doCreateConsumer() { Destination destination = consumer.getSession().createQueue(quot;JOBS.quot; + job); MessageConsumer messageConsumer = consumer.getSession().createConsumer(destination); messageConsumer.setMessageListener(new MyMessageListener(job)); } ... } 13
  • 14. How can the broker be clustered to improve scalability or guarantee availability? • Let’s talk about two features – Network of brokers – Master/slave 14
  • 15. Broker Options • Connectors • Persistence • Master/slave • Security 15
  • 16. Two Types of Transports 16
  • 17. Transport Connectors • Client-to-broker connections – Similar to JDBC connections to a database • Various protocols are supported: – VM – TCP – NIO – UDP – SSL – HTTP/S 17
  • 18. Clients Should Be Configured For Failover • Use the failover protocol: failover:(tcp://broker1:61616,tcp://broker2:61616, tcp://broker3:61616)?initialReconnectDelay=100 18
  • 19. Network of Brokers • Broker-to-broker connections • Various protocols supported: – Static – Failover – Multicast – Zeroconf – Peer – Fanout – Discovery 19
  • 20. Networks of Brokers • Provides large scalability • ActiveMQ store-and-forward allows messages to traverse brokers – Demand-based forwarding – Some people call this distributed queues • Many possible configurations or topologies are supported 20
  • 27. Three Types of Master/Slave • Pure master/slave • Shared filesystem master/slave • JDBC master/slave 27
  • 28. Pure Master/Slave • Shared nothing, fully replicated topology – Does not depend on shared filesystem or database • A Slave broker consumes all message states from the Master broker (messages, acks, tx states) • Slave does not start any networking or transport connectors 28
  • 29. Pure Master/Slave • Master broker will only respond to client when a message exchange has been successfully passed to the slave broker 29
  • 30. Pure Master/Slave • If the master fails, the slave optionally has two modes of operation: – Start up all it’s network and transport connectors • All clients connected to failed Master resume on Slave – Close down completely • Slave is simply used to duplicate state from Master 30
  • 31. Shared Filesystem Master/Slave • Utilizes a directory on a shared filesystem • No restriction on number of brokers • Simple configuration (point to the data dir) • One master selected at random 31
  • 32. JDBC Master/Slave • Recommended when using a shared database • No restriction on the number of brokers • Simple configuration • Clustered database negates single point of failure • One master selected at random 32
  • 33. Client Connectivity With Master/Slave • Clients should use failover transport: failover://(tcp://masterhost:61616, tcp://slavehost:61616)?randomize=false 33
  • 34. How can the broker be clustered to improve scalability or guarantee availability? • Create a network of brokers • Use master/slave for broker failover 34
  • 35. High Availability and Fault Tolerance • RAIDed disks • A Storage Area Network • Clustered relational databases • Clustered JDBC via C-JDBC – http://c-jdbc.objectweb.org/ 35
  • 36. What's the real difference between message persistence strategies? 36
  • 37. AMQ Message Store • Transactional message storage solution • Fast and reliable • Composed of two parts: – Data Store - holds messages in a transactional journal – Reference store - stores message locations for fast retrieval • The default message store in ActiveMQ 5 37
  • 38. Non-Journaled JDBC • Transactional message storage solution • Reliable but not fast – JDBC connection overhead is prohibitively slow 38
  • 39. Journaled JDBC • Transactional message storage solution • Reliable and faster than non-journaled • Two-piece store – Journal - A high-performance, transactional journal – Database - A relational database of your choice • Default database in ActiveMQ 4.x is Apache Derby 39
  • 40. Message Cursors • Messages are no longer stored in memory – Previous to 5.1, message references were stored in memory • Messages are paged in from storage when space is available in memory 40
  • 41. What security options are available? • Authentication – I.e., are you allowed to connect to ActiveMQ? • Authorization – I.e., do you have permission to use that ActiveMQ resource? 41
  • 43. Authorization • Destination level • Message level via custom plugin 43
  • 44. What's the best way to connect non-Java clients? • Let’s talk about wire formats 44
  • 45. Wire Formats • OpenWire – The default in ActiveMQ; a binary protocol • STOMP – Simple Text Oriented Messaging Protocol; a text based protocol • XMPP – The Jabber XML protocol • REST – HTTP POST and GET • AMQP – Not yet fully supported 45
  • 46. OpenWire • A binary wire level protocol for marshaling objects to/from byte arrays • Designed for performance – Sacrificed some ease of implementation • Clients for C++, Java and .NET – The default is Java 46
  • 47. STOMP • A text-based wire level protocol • Designed to be very easy to understand – Encourages implementation in additional languages • Can be easily demonstrated via telnet • Clients for C, Javascript, Perl, PHP, Python, Ruby and more 47
  • 48. What's the best approach if a producer or consumer may be down for some time? 48
  • 49. Use the failover Protocol • Utilize the failover options – initialReconnectDelay - wait before reconnect – maxReconnectDelay - max time between reconnects – useExponentialBackOff - exponentially grow time between reconnects – backOffMultiplier - multiplier for backoff – maxReconnectAttempts - max number of reconnects – randomize - randomly choose from list of brokers – backup - start and hold a hot standby connection 49
  • 50. Use Producer Flow Control • Prevents slow consumers from being flooded ... <destinationPolicy> <policyMap> <policyEntries> <policyEntry topic=quot;FOO.>quot; producerFlowControl=quot;falsequot; memoryLimit=quot;128mbquot;> </policyEntries> </policyMap> </destinationPolicy> ... 50
  • 51. Use Message Persistence • Quality of service to preserve messages in the event of broker failure 51
  • 52. Consumer Options • Message prefetch • Consumer dispatch async • Exclusive consumer • Consumer priority • Message groups • Redeliery policies • Retroactive consumer • Selectors • Some slow consumer strategies 52
  • 53. Message Prefetch • Used for slow consumer situations – Consumer is flooded by messages from the broker • FIFO buffer on the consumer side 53
  • 54. Async Dispatch • Asynchronous message delivery to consumers – Default is true • Useful for slow consumers – Incurs a bit of overhead 54
  • 55. Exclusive Consumers • Anytime more than one consumer is consuming from a queue, message order is lost • Allows a single consumer to consume all messages on a queue to maintain message ordering 55
  • 56. Consumer Priority • Just like it sounds – Gives a consumer priority for message delivery – Allows for the weighting of consumers to optimize network traversal for message delivery 56
  • 57. Message Groups • Uses the JMSXGroupID property to define which message group a message belongs – Guarantees ordered processing of related messages across a single destination – Load balancing of message processing across multiple consumers – HA/failover if consumer goes down 57
  • 58. Redelivery Policy • Messages are redelivered to a client when: – A transacted session is rolled back – A transacted session is closed before commit – A session is using CLIENT_ACKNOWLEDGE and Session.recover() is explicitly called 58
  • 59. Retroactive Consumer • Message replay at start of a subscription – At the start of every subscription, send any old messages that the consumer may have missed – Configurable via policies 59
  • 60. Wildcards on Destinations • Price.> • Price.Stock.> • Price.Stock.NASDAQ.* • Price.Stock.*.IBM ... <destinationPolicy> <policyMap> <policyEntries> <policyEntry topic=quot;Price.Stock.>quot; memoryLimit=quot;128mbquot;> </policyEntries> </policyMap> </destinationPolicy> ... 60
  • 61. Selectors • Used to attach a filter to a subscription • Defined using a subset SQL 92 syntax • JMS selectors – Filters only message properties • JMSType = ‘stock’ and trader = ‘bob’ and price < ‘105’ • XPath selectors – Filters message bodies that contain XML • ‘/message/cheese/text() = 'swiss'’ 61
  • 62. Slow Consumers Strategies 62
  • 63. Slow Consumer Strategies • Various configurable strategies for handling slow consumers • Slow consumer situations are very common • Caused by: – Slow network connections – Unreliable network connections – Busy network situations – Busy JVM situations – Half disconnects with sockets 63
  • 64. Use Message Limit Strategies • PendingMessageLimitStrategy – Calculates the max number of pending messages to be held in memory for a consumer above its prefetch size • ConstantPendingMessageLimitStrategy – A constant limit for all consumers • PrefetchRatePendingMessageLimitStrategy – Calculates the max number of pending messages using a multiplier of the consumers prefetch size 64
  • 65. Use Prefetch and an Eviction Policy • Use the prefetch policy – The prefetch policy has a property named maximumPendingMessageLimit that can be used on a per connection or per consumer basis • Use a message eviction policy – oldestMessageEvictionStrategy - Evict the oldest messages first – oldestMessageWithLowestPriorityEvictionStrategy - Evict the oldest messages with the lowest priority first 65
  • 66. Use Destination Policies • Configured on the destination policies in the ActiveMQ XML configuration file • Combined with wildcards, this is very powerful 66
  • 67. Additional Tips • Consider configuring message cursors • The status of slow consumers can be monitored via JMX properties – discarded - The count of how many messages have been discarded during the lifetime of the subscription due to it being a slow consumer – matched - The current number of messages matched and to be dispatched to the subscription as soon as some capacity is available in the prefetch buffer. So a non-zero value implies that the prefetch buffer is full for this subscription 67
  • 68. How to monitor individual messages, queue depths, or other broker statistics? • JMX • ActiveMQ web console • Additional consumers – Camel routes • SpringSource AMS – Based on Hyperic • IONA FuseHQ 68 – Based on Hyperic
  • 69. What is Apache Camel? http://activemq.apache.org/camel/
  • 70.
  • 72. Fluent Java API RouteBuilder MyRoute = new RouteBuilder() { public void configure() { from(quot;activemq:TEST.QUEUEquot;). to(quot;file:///Users/bsnyder/camelinbox/text.txtquot;). to(quot;log:MyLogquot;); } };
  • 73. XML Config <camelContext id=quot;camelquot; xmlns=quot;http://activemq.apache.org/camel/schema/springquot;> <package>com.mycompany</package> <route> <from uri=quot;activemq:example.Aquot; /> <to uri=quot;file:///Users/bsnyder/camelinbox/text.txtquot; /> <to uri=”log:MyLog?showProperties=true” /> </route> </camelContext>
  • 75. Thank You For Attending! Questions?