SlideShare a Scribd company logo
1 of 75
Download to read offline
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?

More Related Content

What's hot

엔터프라이즈 클라우드 마이그레이션 준비와 실행. 그리고, 클라우드 운영 모범 사례 공유-최지웅, 오픈소스컨설팅 CTO / 장진환, 스마일샤...
엔터프라이즈 클라우드 마이그레이션 준비와 실행. 그리고, 클라우드 운영 모범 사례 공유-최지웅, 오픈소스컨설팅 CTO / 장진환, 스마일샤...엔터프라이즈 클라우드 마이그레이션 준비와 실행. 그리고, 클라우드 운영 모범 사례 공유-최지웅, 오픈소스컨설팅 CTO / 장진환, 스마일샤...
엔터프라이즈 클라우드 마이그레이션 준비와 실행. 그리고, 클라우드 운영 모범 사례 공유-최지웅, 오픈소스컨설팅 CTO / 장진환, 스마일샤...Amazon Web Services Korea
 
Confluent Cloud로 이벤트 기반 마이크로서비스 10배 확장하기 with 29CM
Confluent Cloud로 이벤트 기반 마이크로서비스 10배 확장하기 with 29CMConfluent Cloud로 이벤트 기반 마이크로서비스 10배 확장하기 with 29CM
Confluent Cloud로 이벤트 기반 마이크로서비스 10배 확장하기 with 29CMconfluent
 
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020Amazon Web Services Korea
 
The RabbitMQ Message Broker
The RabbitMQ Message BrokerThe RabbitMQ Message Broker
The RabbitMQ Message BrokerMartin Toshev
 
Mq presentation
Mq presentationMq presentation
Mq presentationxddu
 
Connecting Applications Everywhere with ActiveMQ
Connecting Applications Everywhere with ActiveMQConnecting Applications Everywhere with ActiveMQ
Connecting Applications Everywhere with ActiveMQRob Davies
 
금융 X 하이브리드 클라우드 플랫폼 - 한화생명 디지털 트랜스포메이션 전략 - 김나영 AWS 금융부문 사업개발 담당 / 박인규 AWS 금융...
금융 X 하이브리드 클라우드 플랫폼 - 한화생명 디지털 트랜스포메이션 전략 - 김나영 AWS 금융부문 사업개발 담당 / 박인규 AWS 금융...금융 X 하이브리드 클라우드 플랫폼 - 한화생명 디지털 트랜스포메이션 전략 - 김나영 AWS 금융부문 사업개발 담당 / 박인규 AWS 금융...
금융 X 하이브리드 클라우드 플랫폼 - 한화생명 디지털 트랜스포메이션 전략 - 김나영 AWS 금융부문 사업개발 담당 / 박인규 AWS 금융...Amazon Web Services Korea
 
IBM MQ Online Tutorials
IBM MQ Online TutorialsIBM MQ Online Tutorials
IBM MQ Online TutorialsBigClasses.com
 
Architecting-for-the-cloud-Best-Practices
Architecting-for-the-cloud-Best-PracticesArchitecting-for-the-cloud-Best-Practices
Architecting-for-the-cloud-Best-PracticesAmazon Web Services
 
AWS 유안타증권 HPC 적용사례 :: 유안타 증권 추정호 박사 :: AWS Finance Seminar
AWS 유안타증권 HPC 적용사례 :: 유안타 증권 추정호 박사 :: AWS Finance SeminarAWS 유안타증권 HPC 적용사례 :: 유안타 증권 추정호 박사 :: AWS Finance Seminar
AWS 유안타증권 HPC 적용사례 :: 유안타 증권 추정호 박사 :: AWS Finance SeminarAmazon Web Services Korea
 
Architecting for High Availability
Architecting for High AvailabilityArchitecting for High Availability
Architecting for High AvailabilityAmazon Web Services
 
Cache in API Gateway
Cache in API GatewayCache in API Gateway
Cache in API GatewayGilWon Oh
 
IBM Websphere MQ Basic
IBM Websphere MQ BasicIBM Websphere MQ Basic
IBM Websphere MQ BasicPRASAD BHATKAR
 
Rabbitmq an amqp message broker
Rabbitmq an amqp message brokerRabbitmq an amqp message broker
Rabbitmq an amqp message brokerANASYS
 
IBM DataPower Gateway - Common Use Cases
IBM DataPower Gateway - Common Use CasesIBM DataPower Gateway - Common Use Cases
IBM DataPower Gateway - Common Use CasesIBM DataPower Gateway
 
AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...
AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...
AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...Amazon Web Services Korea
 
[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on KubernetesBruno Borges
 

What's hot (20)

엔터프라이즈 클라우드 마이그레이션 준비와 실행. 그리고, 클라우드 운영 모범 사례 공유-최지웅, 오픈소스컨설팅 CTO / 장진환, 스마일샤...
엔터프라이즈 클라우드 마이그레이션 준비와 실행. 그리고, 클라우드 운영 모범 사례 공유-최지웅, 오픈소스컨설팅 CTO / 장진환, 스마일샤...엔터프라이즈 클라우드 마이그레이션 준비와 실행. 그리고, 클라우드 운영 모범 사례 공유-최지웅, 오픈소스컨설팅 CTO / 장진환, 스마일샤...
엔터프라이즈 클라우드 마이그레이션 준비와 실행. 그리고, 클라우드 운영 모범 사례 공유-최지웅, 오픈소스컨설팅 CTO / 장진환, 스마일샤...
 
Confluent Cloud로 이벤트 기반 마이크로서비스 10배 확장하기 with 29CM
Confluent Cloud로 이벤트 기반 마이크로서비스 10배 확장하기 with 29CMConfluent Cloud로 이벤트 기반 마이크로서비스 10배 확장하기 with 29CM
Confluent Cloud로 이벤트 기반 마이크로서비스 10배 확장하기 with 29CM
 
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020
 
The RabbitMQ Message Broker
The RabbitMQ Message BrokerThe RabbitMQ Message Broker
The RabbitMQ Message Broker
 
Mq presentation
Mq presentationMq presentation
Mq presentation
 
Amazon simple queue service
Amazon simple queue serviceAmazon simple queue service
Amazon simple queue service
 
Connecting Applications Everywhere with ActiveMQ
Connecting Applications Everywhere with ActiveMQConnecting Applications Everywhere with ActiveMQ
Connecting Applications Everywhere with ActiveMQ
 
금융 X 하이브리드 클라우드 플랫폼 - 한화생명 디지털 트랜스포메이션 전략 - 김나영 AWS 금융부문 사업개발 담당 / 박인규 AWS 금융...
금융 X 하이브리드 클라우드 플랫폼 - 한화생명 디지털 트랜스포메이션 전략 - 김나영 AWS 금융부문 사업개발 담당 / 박인규 AWS 금융...금융 X 하이브리드 클라우드 플랫폼 - 한화생명 디지털 트랜스포메이션 전략 - 김나영 AWS 금융부문 사업개발 담당 / 박인규 AWS 금융...
금융 X 하이브리드 클라우드 플랫폼 - 한화생명 디지털 트랜스포메이션 전략 - 김나영 AWS 금융부문 사업개발 담당 / 박인규 AWS 금융...
 
Active MQ
Active MQActive MQ
Active MQ
 
Rabbitmq basics
Rabbitmq basicsRabbitmq basics
Rabbitmq basics
 
IBM MQ Online Tutorials
IBM MQ Online TutorialsIBM MQ Online Tutorials
IBM MQ Online Tutorials
 
Architecting-for-the-cloud-Best-Practices
Architecting-for-the-cloud-Best-PracticesArchitecting-for-the-cloud-Best-Practices
Architecting-for-the-cloud-Best-Practices
 
AWS 유안타증권 HPC 적용사례 :: 유안타 증권 추정호 박사 :: AWS Finance Seminar
AWS 유안타증권 HPC 적용사례 :: 유안타 증권 추정호 박사 :: AWS Finance SeminarAWS 유안타증권 HPC 적용사례 :: 유안타 증권 추정호 박사 :: AWS Finance Seminar
AWS 유안타증권 HPC 적용사례 :: 유안타 증권 추정호 박사 :: AWS Finance Seminar
 
Architecting for High Availability
Architecting for High AvailabilityArchitecting for High Availability
Architecting for High Availability
 
Cache in API Gateway
Cache in API GatewayCache in API Gateway
Cache in API Gateway
 
IBM Websphere MQ Basic
IBM Websphere MQ BasicIBM Websphere MQ Basic
IBM Websphere MQ Basic
 
Rabbitmq an amqp message broker
Rabbitmq an amqp message brokerRabbitmq an amqp message broker
Rabbitmq an amqp message broker
 
IBM DataPower Gateway - Common Use Cases
IBM DataPower Gateway - Common Use CasesIBM DataPower Gateway - Common Use Cases
IBM DataPower Gateway - Common Use Cases
 
AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...
AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...
AWS Fault Injection Simulator를 통한 실전 카오스 엔지니어링 - 윤석찬 AWS 수석 테크에반젤리스트 / 김신 SW엔...
 
[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes
 

Similar to 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 JMSBruce Snyder
 
Messaging With Apache ActiveMQ
Messaging With Apache ActiveMQMessaging With Apache ActiveMQ
Messaging With Apache ActiveMQBruce Snyder
 
AP4R on RubyKaigi2007 (English only)
AP4R on RubyKaigi2007 (English only)AP4R on RubyKaigi2007 (English only)
AP4R on RubyKaigi2007 (English only)Kato Kiwamu
 
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 PlatformsFIWARE
 
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 ScalabilityZendCon
 
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
 
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 2008ChemAxon
 
Non-Kafkaesque Apache Kafka - Yottabyte 2018
Non-Kafkaesque Apache Kafka - Yottabyte 2018Non-Kafkaesque Apache Kafka - Yottabyte 2018
Non-Kafkaesque Apache Kafka - Yottabyte 2018Otávio Carvalho
 
AP4R on RubyConf2007
AP4R on RubyConf2007AP4R on RubyConf2007
AP4R on RubyConf2007Kato Kiwamu
 
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 Bussumedha.r
 
Connecting applicationswitha mq
Connecting applicationswitha mqConnecting applicationswitha mq
Connecting applicationswitha mqRob Davies
 
Xen_and_Rails_deployment
Xen_and_Rails_deploymentXen_and_Rails_deployment
Xen_and_Rails_deploymentAbhishek Singh
 
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 platformsFederico Michele Facca
 
Lightweight Grids With Terracotta
Lightweight Grids With TerracottaLightweight Grids With Terracotta
Lightweight Grids With TerracottaPT.JUG
 
Jms deep dive [con4864]
Jms deep dive [con4864]Jms deep dive [con4864]
Jms deep dive [con4864]Ryan Cuprak
 
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 - 2009Andrei Gheorghe
 
Acus08 Advanced Load Balancing Apache2.2
Acus08 Advanced Load Balancing Apache2.2Acus08 Advanced Load Balancing Apache2.2
Acus08 Advanced Load Balancing Apache2.2Jim Jagielski
 
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...Gear6
 

Similar to 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...
 

More from 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 SpringBruce Snyder
 
Enterprise Messaging With Spring JMS
Enterprise Messaging With Spring JMSEnterprise Messaging With Spring JMS
Enterprise Messaging With Spring JMSBruce Snyder
 
Styles of Applicaton Integration Using Spring
Styles of Applicaton Integration Using SpringStyles of Applicaton Integration Using Spring
Styles of Applicaton Integration Using SpringBruce Snyder
 
ActiveMQ In Action - ApacheCon 2011
ActiveMQ In Action - ApacheCon 2011ActiveMQ In Action - ApacheCon 2011
ActiveMQ In Action - ApacheCon 2011Bruce 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 JockeyBruce Snyder
 
Apache ActiveMQ and Apache ServiceMix
Apache ActiveMQ and Apache ServiceMixApache ActiveMQ and Apache ServiceMix
Apache ActiveMQ and Apache ServiceMixBruce Snyder
 
Service-Oriented Integration With Apache ServiceMix
Service-Oriented Integration With Apache ServiceMixService-Oriented Integration With Apache ServiceMix
Service-Oriented Integration With Apache ServiceMixBruce Snyder
 
Taking Apache Camel For a Ride
Taking Apache Camel For a RideTaking Apache Camel For a Ride
Taking Apache Camel For a RideBruce Snyder
 
Service Oriented Integration With ServiceMix
Service Oriented Integration With ServiceMixService Oriented Integration With ServiceMix
Service Oriented Integration With ServiceMixBruce Snyder
 
Taking Apache Camel For A Ride
Taking Apache Camel For A RideTaking Apache Camel For A Ride
Taking Apache Camel For A RideBruce Snyder
 
Taking Apache Camel For A Ride
Taking Apache Camel For A RideTaking Apache Camel For A Ride
Taking Apache Camel For A RideBruce Snyder
 

More from Bruce Snyder (12)

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

Recently uploaded

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
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 WorkerThousandEyes
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
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?Igalia
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 

Recently uploaded (20)

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
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
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
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?
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 

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?