SlideShare ist ein Scribd-Unternehmen logo
1 von 75
Downloaden Sie, um offline zu lesen
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?

Weitere ähnliche Inhalte

Was ist angesagt?

Best Practices for Architecting in the Cloud - Jeff Barr
Best Practices for Architecting in the Cloud - Jeff BarrBest Practices for Architecting in the Cloud - Jeff Barr
Best Practices for Architecting in the Cloud - Jeff Barr
Amazon Web Services
 
Getting Started with Serverless Architectures with Microservices_AWSPSSummit_...
Getting Started with Serverless Architectures with Microservices_AWSPSSummit_...Getting Started with Serverless Architectures with Microservices_AWSPSSummit_...
Getting Started with Serverless Architectures with Microservices_AWSPSSummit_...
Amazon Web Services
 

Was ist angesagt? (20)

REST APIs and MQ
REST APIs and MQREST APIs and MQ
REST APIs and MQ
 
AWS SQS for better architecture
AWS SQS for better architectureAWS SQS for better architecture
AWS SQS for better architecture
 
Amazon SQS overview
Amazon SQS overviewAmazon SQS overview
Amazon SQS overview
 
Serverless computing
Serverless computingServerless computing
Serverless computing
 
What is Material UI?
What is Material UI?What is Material UI?
What is Material UI?
 
IBM INTEGRATION BUS (IIB V10)—DATA ROUTING AND TRANSFORMATION
IBM INTEGRATION BUS (IIB V10)—DATA ROUTING AND TRANSFORMATIONIBM INTEGRATION BUS (IIB V10)—DATA ROUTING AND TRANSFORMATION
IBM INTEGRATION BUS (IIB V10)—DATA ROUTING AND TRANSFORMATION
 
Best Practices for Architecting in the Cloud - Jeff Barr
Best Practices for Architecting in the Cloud - Jeff BarrBest Practices for Architecting in the Cloud - Jeff Barr
Best Practices for Architecting in the Cloud - Jeff Barr
 
API Integration For Building Software Applications Powerpoint Presentation Sl...
API Integration For Building Software Applications Powerpoint Presentation Sl...API Integration For Building Software Applications Powerpoint Presentation Sl...
API Integration For Building Software Applications Powerpoint Presentation Sl...
 
Accelerate Quality with Postman - Basics
Accelerate Quality with Postman - BasicsAccelerate Quality with Postman - Basics
Accelerate Quality with Postman - Basics
 
Microservices for Enterprises
Microservices for Enterprises Microservices for Enterprises
Microservices for Enterprises
 
Data Protection in Transit and at Rest
Data Protection in Transit and at RestData Protection in Transit and at Rest
Data Protection in Transit and at Rest
 
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
[오픈소스컨설팅] EFK Stack 소개와 설치 방법[오픈소스컨설팅] EFK Stack 소개와 설치 방법
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
 
2015-StarWest presentation on REST-assured
2015-StarWest presentation on REST-assured2015-StarWest presentation on REST-assured
2015-StarWest presentation on REST-assured
 
Azure Service Bus
Azure Service BusAzure Service Bus
Azure Service Bus
 
Aneka platform
Aneka platformAneka platform
Aneka platform
 
Deep Dive into Building Streaming Applications with Apache Pulsar
Deep Dive into Building Streaming Applications with Apache Pulsar Deep Dive into Building Streaming Applications with Apache Pulsar
Deep Dive into Building Streaming Applications with Apache Pulsar
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as Code
 
Migrating from IBM API Connect v5 to v2018
Migrating from IBM API Connect v5 to v2018Migrating from IBM API Connect v5 to v2018
Migrating from IBM API Connect v5 to v2018
 
Getting Started with Serverless Architectures with Microservices_AWSPSSummit_...
Getting Started with Serverless Architectures with Microservices_AWSPSSummit_...Getting Started with Serverless Architectures with Microservices_AWSPSSummit_...
Getting Started with Serverless Architectures with Microservices_AWSPSSummit_...
 
Angular 4 and TypeScript
Angular 4 and TypeScriptAngular 4 and TypeScript
Angular 4 and TypeScript
 

Ähnlich wie 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
 

Ähnlich wie 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...
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
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
 

Kürzlich hochgeladen (20)

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
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
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
 
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, ...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
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
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 

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?