0% found this document useful (0 votes)
93 views6 pages

Jboss A-Mq

This document provides information on key concepts and configuration options for Apache ActiveMQ, an open source message broker. It covers topics such as queues, topics, connection factories, message producers and consumers, brokers, persistence, failover, networking, and more. Configuration examples are given for broker settings like destinations, cursors, message expiry, persistence, master-slave replication, and more. The resource adapter for integrating ActiveMQ with JEE applications is also summarized.

Uploaded by

Ravi Bhardwaj
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
93 views6 pages

Jboss A-Mq

This document provides information on key concepts and configuration options for Apache ActiveMQ, an open source message broker. It covers topics such as queues, topics, connection factories, message producers and consumers, brokers, persistence, failover, networking, and more. Configuration examples are given for broker settings like destinations, cursors, message expiry, persistence, master-slave replication, and more. The resource adapter for integrating ActiveMQ with JEE applications is also summarized.

Uploaded by

Ravi Bhardwaj
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

JMS Basics

Queue
Topic
ConnectionFactory
QueueSender/MessageProducer
QueueReceiver/MessageConsumer/MDB
QueueBrowser

Installing and Configuring Jboss A-MQ


Download a binary distribution of Jboss A-MQ and unpack it.
To run an Jboss A-MQ broker.
bin>./amq
DLQ and Message redelivery
Changes require in activemq.xml
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" producerFlowControl="true">
<pendingMessageLimitStrategy>
<constantPendingMessageLimitStrategy limit="1000" />
</pendingMessageLimitStrategy>
</policyEntry>
<policyEntry queue=">" producerFlowControl="true"memoryLimit="1mb">
<deadLetterStrategy>
<individualDeadLetterStrategy
queuePrefix="DLQ."
useQueueForQueueMessages="true" />
</deadLetterStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>

Message Expiry.
QueueSender qsender
qsender.setTimeToLive(1000);

Broker persistence
<persistenceAdapter>
<kahaDB directory="${data}/kahadb"/>
</persistenceAdapter>

OR

<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#oracle-ds">
</jdbcPersistenceAdapter>
</persistenceAdapter>

~~
<bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver" />
<property name="url"
value="jdbc:oracle:thin:@XXXXXXXX:1521:orcl" />
<property name="username" value="XXXX" />
<property name="password" value="XXXX" />
<property name="poolPreparedStatements" value="true" />
</bean>

Cursors
There are two additional types of cursor that could be used: VM Cursor and File based Cursor

VM Cursor

<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue="org.apache.>">
<deadLetterStrategy>
<individualDeadLetterStrategy queuePrefix="Test.DLQ."/>
</deadLetterStrategy>
<pendingQueuePolicy>
<vmQueueCursor />
</pendingQueuePolicy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>

File Based Cursor

<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue="org.apache.>">
<deadLetterStrategy>
<individualDeadLetterStrategy queuePrefix="Test.DLQ."/>
</deadLetterStrategy>
<pendingQueuePolicy>
<fileQueueCursor />
</pendingQueuePolicy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>

Message Selectors

Producer

Mesasge message = session.createTextMessage("<foo>hey</foo>");


message.setStringProperty("JMSXGroupID", "IBM_NASDAQ_20/4/05");
...
producer.send(message);

Consumer

private QueueSession qsession;


private QueueReceiver qreceiver;
qreceiver = qsession.createReceiver(queue,JMSXGroupID='IBM_NASDAQ_20/4/05');

Master/Slave configuration
<persistenceAdapter>
<kahaDB directory="/sharedFileSystem/sharedBrokerData" />
<locker>
<shared-file-locker lockAcquireSleepInterval="10000" />
</locker>
</persistenceAdapter>

Note:- Run both Master and Salve with same directory


Network Connectors

Static

<?xml version="1.0" encoding="UTF-8"?>


<beans xmlns="http://activemq.org/config/1.0">
<broker brokerName="receiver" persistent="false" useJmx="false">
<networkConnectors>
<networkConnector name="linkToBrokerB"
uri="static:(tcp://localhost:61617)"
duplex="true" userName="admin" password="admin"/>
<networkConnector name="linkToBrokerC"
uri="static:(tcp://localhost:61618)"
duplex="true" userName="admin" password="admin"/>
</networkConnectors>
<persistenceAdapter>
<memoryPersistenceAdapter/>
</persistenceAdapter>
<transportConnectors>
<transportConnector uri="tcp://localhost:62002"/>
</transportConnectors>
</broker>
</beans>

Dynamic

<?xml version="1.0" encoding="UTF-8"?>


<beans xmlns="http://activemq.org/config/1.0">
<broker name="sender" persistent="false" useJmx="false">
<networkConnectors>
<networkConnector uri="multicast://default"/>
</networkConnectors>
<persistenceAdapter>
<memoryPersistenceAdapter/>
</persistenceAdapter>
<transportConnectors>
<transportConnector uri="tcp://localhost:0"
discoveryUri="multicast://default"/>
</transportConnectors>
</broker>
</beans>

Destination filtering
Wildcard
.
*
>

Description
Separates segments in a path name.
Matches any single segment in a path name.
Matches any number of segments in a path name.

Destination wildcard
PRICE.>
PRICE.STOCK.>
PRICE.STOCK.NASDAQ.*
PRICE.STOCK.*.IBM

What it matches
Any price for any product on any exchange.
Any price for a stock on any exchange.
Any stock price on NASDAQ.
Any IBM stock price on any exchange.

<networkConnectors>
<networkConnector name="linkToBrokerB"
uri="static:(tcp://localhost:61002)"
networkTTL="3">
<dynamicallyIncludedDestinations>
<queue physicalName="TRADE.STOCK.>"/>
<topic physicalName="PRICE.STOCK.>"/>
</dynamicallyIncludedDestinations>
</networkConnector>
</networkConnectors>

Failover
failover:(tcp://local:61616,tcp://remote:61616)

AMQ Resource Adapter:


Standalone.xml:
<resource-adapters>
<resource-adapter id="activemq-rar.rar">
<archive>
activemq-rar.rar
</archive>
<transaction-support>XATransaction</transaction-support>
<config-property name="Password">
admin
</config-property>
<config-property name="UserName">
admin
</config-property>
<config-property name="ServerUrl">
tcp://localhost:63636?jms.rmIdFromConnectionId=true
</config-property>
<connection-definitions>
<connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" jndiname="java:/ConnectionFactory" enabled="true" pool-name="ConnectionFactory">
<xa-pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>20</max-pool-size>
<prefill>true</prefill>
<is-same-rm-override>false</is-same-rm-override>
</xa-pool>
<recovery>
<recover-credential>
<user-name>admin</user-name>
<password>admin</password>
</recover-credential>
</recovery>
</connection-definition>
</connection-definitions>
<admin-objects>
<admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndiname="java:/queue/TestAMQ" use-java-context="true" pool-name="HELLOWORLDMDBQueue">
<config-property name="PhysicalName">
HELLOWORLDMDBQueue
</config-property>
</admin-object>
<admin-object class-name="org.apache.activemq.command.ActiveMQTopic" jndiname="java:/topic/TestAMT" use-java-context="true" pool-name="HELLOWORLDMDBTopic">
<config-property name="PhysicalName">
HELLOWORLDMDBTopic
</config-property>
</admin-object>
</admin-objects>
</resource-adapter>
</resource-adapters>
And:

<mdb>
<resource-adapter-ref resource-adapter-name="activemq-rar.rar"/>
<bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
</mdb>
In MDB code:
@MessageDriven(
activationConfig={
@ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName="destination", propertyValue="HELLOWORLDMDBQueue")
}
)
@ResourceAdapter(value="activemq-rar.rar")
public class MyMDB implements MessageListener{
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("nnt Message has been Received by MDB : "+ textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}

You might also like