48
CamelOne 2013 June 10-11 2013 Boston, MA Apache ActiveMQ Internals Christian Posta Senior Consultant and Architect June 10, 2013 1

Camel oneactivemq posta-final

  • Upload
    ceposta

  • View
    1.177

  • Download
    0

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Camel oneactivemq posta-final

CamelOne 2013 June 10-11 2013

Boston, MA

Apache ActiveMQ Internals

Christian Posta Senior Consultant and Architect

June 10, 2013

1

Page 2: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

2

Why are You Here?

•  Use ActiveMQ?

• What is ActiveMQ?

•  Dug into the code?

•  Interested in contributing back?

•  Understand configuration better

Page 3: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

3

Goals of Presentation •  Give back to community

•  Deliver understanding about architecture

•  Brief intro to ActiveMQ

•  Overview of architecture

•  Dive into major subcomponents

Page 4: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

4

Who am I?

•  Senior Consultant and Architect at Red Hat (formerly FuseSource)

•  Committer on ActiveMQ

•  Author: Essential Camel Components DZone Refcard

•  Christian Posta

•  Blog: http://christianposta.com/blog

•  Email: [email protected]

•  Twitter: @christianposta

Page 5: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

5

What is ActiveMQ?

•  OpenSource messaging broker

•  Apache v2 licensed

•  Very active community

•  Used at top companies

•  5.8.0 latest release (in JBoss A-MQ 6.0) ���5.9.0 on its way

Page 6: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

6

Features •  High performance

•  High availability

•  Light-weight

•  Multi-protocol

•  JMS compliant

•  Supported in production

Page 7: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

7

When to use ActiveMQ?

•  Asynchronous communication

•  Reliable message passing

•  Loose coupling

•  Heterogeneous integration

•  Real-time data

Page 8: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

8

This is ActiveMQ…

Page 9: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

9

How it’s built

•  Java project (supports Java 7!)

•  Maven project

•  Divided into client/broker and feature modules

•  Unit tests in activemq-unit-tests

•  mvn  clean  package  –Dtest=false  

Page 10: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

10

ActiveMQ Source

•  SVN at Apache: https://svn.apache.org/repos/asf/activemq/trunk/

•  Git at Apache: ���http://git.apache.org

•  Github: ���https://github.com/apache/activemq

•  Use git-svn and point directly to Apache SVN!

Page 11: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

11

Major Subcomponents

•  Transports and transport connectors

•  Broker core

•  Persistence adapters

•  Network of brokers / clustering

Page 12: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

12

Architecture

Broker CoreTransport

Transport

TransportJMX

NetworkConnectors

Security

Store

Adapter

Page 13: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

13

Transports���and ���

Transport Connectors

Page 14: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

14

Transport Connector

•  Let data in or out

•  Think of as “SocketServer” (which it is J)

•  Broker side

•  Highly configurable through URI

•  TransportConnector vs Transport

Page 15: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

15

Example Configuration

•  Broker side: ������<transportConnector  uri=“tcp://0.0.0.0:61616”  />  

•  Broker side tuning: ������<transportConnector  uri="tcp://0.0.0.0:0?transport.option=true”/>  

•  Client side: ������ConnectionFactory("tcp://0.0.0.0:61616?soTimeout=xx”)  

Page 16: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

16

Out of the box

•  TCP, NIO

•  UDP

•  SSL, SSL+NIO

•  VM

•  HTTP

• WebSockets

Page 17: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

17

Wire Formats

•  Part of transport

•  Encode/marshall

•  Decode/unmarshall

•  Creates Java objects

Wire

Broker

Transport

WireFormat

Socket

Page 18: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

18

Wire Formats

•  AMQP 1.0

•  OpenWire v1- v10

•  STOMP 1.0, 1.1, 1.2

•  MQTT 3.1

Page 19: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

19

Filters, Listeners

•  TransportFilter – decorator pattern to add specific functionality, implements Transport, TransportListener

•  TransportListener – callback for staged handling of incoming frame objects, on the way to broker

•  Examples: ���Stomp, inactivity heartbeat, negotiation, logging, mutex, etc

Page 20: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

20

Transports Architecture

Wire Broker

TransportListener

TransportFilterTransport

WireFormat

TransportFilter

TransportFilter

TransportListener

TransportListener

TransportListener

Page 21: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

21

Broker Core

Page 22: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

22

Broker Core

•  Regions, layers of brokers

•  Memory management

•  Message cursors

•  Threading

Page 23: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

23

Region Broker

•  Core of the broker

•  Create consumers

•  Create producers

•  Create destinations

•  Send messages to correct destination

RegionBroker

Router

Topic Region TempTopic Region

Queue Region

TempQueue Region

ConnectionStates Destinations ClientIDs

Page 24: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

24

Broker Filters

•  Decorate RegionBroker

•  How internal features like advisories and scheduling are implemented

•  Basis for broker plugins

•  http://activemq.apache.org/interceptors.html

•  http://activemq.apache.org/developing-plugins.html

Page 25: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

25

Broker Filters SchedulerBroker

TransactionBroker

AdvisoryBroker

RegionBroker

Router

Send message

Add Consumer

Add Connection

Page 26: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

26

System Usage

•  Allocate resources for the broker

•  Persistent, Non-Persistent, in Memory Cache

<systemUsage>          <systemUsage>                  <memoryUsage>                          <memoryUsage  limit="64  mb"/>                  </memoryUsage>                  <storeUsage>                          <storeUsage  limit="100  gb"/>                  </storeUsage>                  <tempUsage>                          <tempUsage  limit="50  gb"/>                  </tempUsage>          </systemUsage>  </systemUsage>    

Page 27: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

27

Memory Usage JVM Heap Space

Messages (MemoryUsage)

Queue Queue Queue Queue

ActiveMQ Objects

Index Cache Threads

16 MB 16 MB 16 MB

256 MB

Page 28: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

28

Message Cursors

•  Buffers for tracking position

•  Consumer Subscriptions

•  VMPendingMessageCursor

•  FilePendingMessageCursor

•  Store Cursors + PrefetchSubscriptions

Page 29: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

29

Store Cursors

http://activemq.apache.org/message-cursors.html

Page 30: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

30

Store Cursors

http://activemq.apache.org/message-cursors.html

Page 31: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

31

Threading

•  Producer connections

•  Dispatching within destinations

•  Consumer connections

•  Store write threads

•  Ancillary broker tasks (expiration, producer flow control, scheduled messages, etc)

Page 32: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

32

Threads

TCP

TCP

Queue Dispatch Thread

Consumer Transport Thread

Producer Transport Thread

Queue

Consumer Connection

Subscription

Producer Connection

Page 33: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

33

TCP

TCP

Consumer Transport Thread

Producer Transport Thread

Queue

Consumer Connection

Subscription

Producer Connection

<policyEntry  queue=“>”  optimizedDispatched=“true”  >  

Page 34: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

34

TCP

TCP

Producer Transport Thread

Queue

Consumer Connection

Subscription

Producer Connection

<policyEntry  queue=“>”  optimizedDispatched=“true”  >  

tcp://host:port?jms.dispatchAsync=false  

Page 35: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

35

Persistence Adapter

Page 36: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

36

Persistence Adapters

•  Add reliability to message delivery

•  Optimized databases

•  Pluggable implementations

•  Out of the box:

•  KahaDB

•  LevelDB

•  JDBC

Page 37: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

37

Persistence Adapter

Locker

Queue Store Topic Store

Journal

Index Redo

File System / RDBMS

Page 38: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

38

Lockers

•  Used for master election

•  SharedFileLocker

•  DatabaseLocker, LeaseDatabaseLocker

•  ZooKeeper based for replicated LevelDB ���new in upcoming 5.9.0, not available yet

•  Your own!

Page 39: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

39

Message Stores

•  Topic vs Queue stores

•  Difference use cases

•  Storage vs broadcast

•  Relatively cheap

Topic StoreTopic Store

Topic Store

Journal

Index Redo

File System

Queue StoreQueue Store

Queue Store

Page 40: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

40

Store implementation

•  Journal

•  Index

•  Redo/write ahead log

Index Journal

Redo Log

X X X X

Page 41: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

41

Network of Brokers

Page 42: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

42

Network of Brokers

•  Connect brokers together

•  Achieve scale

•  Store and forward

Broker

Message

Broker

Page 43: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

43

Networking components

•  Network Connector

•  Discovery Agents

•  Bridge

•  Advisory messages/static destination filters

•  Proxy Consumers

Page 44: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

44

Advisory Messages

•  Advisory Topics

•  Internal events���ActiveMQ.Advisory.Connection���ActiveMQ.Advisory.Consumer

•  Event driven

•  Replay upon first connect

•  Necessary for Dynamic Demand Forwarding

Page 45: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

45

Dynamic Demand Forwarding

Broker

Message

Broker

Producer

Message

Consumer

Message

establish demand

forward message

Page 46: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

46

Bridging in Detail

Broker A

Broker B

Forward Msg

AdvisoriesQueue

CQueue

Producer Consumer

Bridge

C

Page 47: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

47

Wrap Up •  Checkout the ActiveMQ wiki: ���

http://activemq.apache.org

•  Mailing list: ���[email protected]

•  Book: ActiveMQ in Action���http://www.manning.com/snyder/

•  Blog���http://christianposta.com/blog

Page 48: Camel oneactivemq posta-final

CamelOne 2013

Cam

elO

ne

48

Questions?