I ran across a similar set of problems when setting up a 3-broker
NoB on
my Windows XP machine and addressed it by simply assigning each
broker
it's own separate ${activemq.base}. If you don't do that, you end
up with
a shared file system Master/Slave configuration. Here's my
configuration:
<broker brokerName="localhost" useJmx="true"
xmlns="http://activemq.org/config/1.0">
<!-- Use the following to configure how ActiveMQ is exposed in
JMX -->
<managementContext>
<managementContext connectorPort="1099"
jmxDomainName="org.apache.activemq"/>
</managementContext>
<!-- In ActiveMQ 4, you can setup destination policies -->
<destinationPolicy>
<policyMap><policyEntries>
<policyEntry topic="FOO.>">
<dispatchPolicy>
<strictOrderDispatchPolicy />
</dispatchPolicy>
<subscriptionRecoveryPolicy>
<lastImageSubscriptionRecoveryPolicy />
</subscriptionRecoveryPolicy>
</policyEntry>
</policyEntries></policyMap>
</destinationPolicy>
<persistenceAdapter>
<journaledJDBC journalLogFiles="5"
dataDirectory="${activemq.base}/activemq-data"/>
</persistenceAdapter>
<transportConnectors>
<transportConnector name="openwire" uri="tcp://localhost:
61616"
discoveryUri="multicast://default"/>
<transportConnector name="ssl" uri="ssl://localhost:
61617"/>
<transportConnector name="stomp" uri="stomp://localhost:
61613"/>
</transportConnectors>
<networkConnectors>
<!-- This broker is going to just listen for other brokers -->
<!--
<networkConnector name="default-nc" uri="multicast://
default"/>
-->
</networkConnectors>
<plugins>
<!-- use JAAS to authenticate using the login.config file on the
classpath to configure JAAS -->
<!-- <jaasAuthenticationPlugin configuration="activemq-
domain" /> -->
</plugins>
</broker>
<broker brokerName="localhost2" useJmx="true"
xmlns="http://activemq.org/config/1.0">
<!-- Use the following to configure how ActiveMQ is exposed in
JMX -->
<managementContext>
<managementContext connectorPort="1098"
jmxDomainName="org.apache.activemq"/>
</managementContext>
<!-- In ActiveMQ 4, you can setup destination policies -->
<destinationPolicy>
<policyMap><policyEntries>
<policyEntry topic="FOO.>">
<dispatchPolicy>
<strictOrderDispatchPolicy />
</dispatchPolicy>
<subscriptionRecoveryPolicy>
<lastImageSubscriptionRecoveryPolicy />
</subscriptionRecoveryPolicy>
</policyEntry>
</policyEntries></policyMap>
</destinationPolicy>
<persistenceAdapter>
<journaledJDBC journalLogFiles="5"
dataDirectory="/tmp/amq-base2/activemq-data"/>
</persistenceAdapter>
<transportConnectors>
<transportConnector name="openwire2" uri="tcp://localhost:
61618"
discoveryUri="multicast://default"/>
</transportConnectors>
<networkConnectors>
<networkConnector name="localhost2"
uri="static://(tcp://localhost:61616)" />
</networkConnectors>
<plugins>
<!-- use JAAS to authenticate using the login.config file on the
classpath to configure JAAS -->
<!-- <jaasAuthenticationPlugin configuration="activemq-
domain" /> -->
</plugins>
</broker>
<broker brokerName="localhost3" useJmx="true"
xmlns="http://activemq.org/config/1.0">
<!-- In ActiveMQ 4, you can setup destination policies -->
<destinationPolicy>
<policyMap><policyEntries>
<policyEntry topic="FOO.>">
<dispatchPolicy>
<strictOrderDispatchPolicy />
</dispatchPolicy>
<subscriptionRecoveryPolicy>
<lastImageSubscriptionRecoveryPolicy />
</subscriptionRecoveryPolicy>
</policyEntry>
</policyEntries></policyMap>
</destinationPolicy>
<!-- Use the following to configure how ActiveMQ is exposed
in JMX
-->
<managementContext>
<managementContext connectorPort="1097"
jmxDomainName="org.apache.activemq"/>
</managementContext>
<persistenceAdapter>
<journaledJDBC journalLogFiles="5"
dataDirectory="/tmp/amq-base3/activemq-data"/>
</persistenceAdapter>
<transportConnectors>
<transportConnector name="openwire3" uri="tcp://localhost:
61619"
discoveryUri="multicast://default"/>
</transportConnectors>
<networkConnectors>
<networkConnector name="localhost3"
uri="static://(tcp://localhost:61616)" />
</networkConnectors>
<plugins>
<!-- use JAAS to authenticate using the login.config file on the
classpath to configure JAAS -->
<!-- <jaasAuthenticationPlugin configuration="activemq-
domain" /> -->
</plugins>
</broker>
Hope this helps,
Joe
j0llyr0g3r wrote:
Hey folks,
i am really getting desperate with the configuration of a simple
network
of brokers...
What i wanted to do was:
- One instance of activeMQ
- 3 brokers running within that instance
- 1 Producer and 2 Consumers
In Ascii:
Consumer Consumer
| |
broker_A broker_C
\ /
\ /
\/
broker_B
^
|
Producer
So i thought the following broker-config.xml would do the trick:
Broker_B listens on Port 61616 and knows the brokers "A" and "C"
which
should be listening on 61617 and 61618:
Broker_B:
<broker brokerName="broker_B" useJmx="true"
xmlns="http://activemq.org/config/1.0">
<!-- Use the following to configure how ActiveMQ is exposed
in JMX
-->
<managementContext>
<managementContext connectorPort="5555"
jmxDomainName="org.apache.activemq"/>
</managementContext>
<persistenceAdapter>
<journaledJDBC journalLogFiles="5"
dataDirectory="${activemq.base}/activemq-data/broker_B/"/>
</persistenceAdapter>
<destinationPolicy>
<policyMap><policyEntries>
<policyEntry topic="FOO">
<dispatchPolicy>
<strictOrderDispatchPolicy />
</dispatchPolicy>
<subscriptionRecoveryPolicy>
<lastImageSubscriptionRecoveryPolicy />
</subscriptionRecoveryPolicy>
</policyEntry>
</policyEntries></policyMap>
</destinationPolicy>
<transportConnectors>
<transportConnector uri="tcp://localhost:61616"
discoveryUri="multicast://default"/>
</transportConnectors>
<networkConnectors>
<networkConnector
uri="static://(tcp://localhost:61617,tcp://localhost:61618)"
networkTTL="99" />
</networkConnectors>
</broker>
Broker_A:
<broker brokerName="broker_A" useJmx="true"
xmlns="http://activemq.org/config/1.0">
<!-- Use the following to configure how ActiveMQ is exposed
in JMX
-->
<managementContext>
<managementContext connectorPort="4444"
jmxDomainName="org.apache.activemq"/>
</managementContext>
<persistenceAdapter>
<journaledJDBC journalLogFiles="5"
dataDirectory="${activemq.base}/activemq-data/broker_A/"/>
</persistenceAdapter>
<!-- In ActiveMQ 4, you can setup destination policies -->
<destinationPolicy>
<policyMap><policyEntries>
<policyEntry topic="FOO">
<dispatchPolicy>
<strictOrderDispatchPolicy />
</dispatchPolicy>
<subscriptionRecoveryPolicy>
<lastImageSubscriptionRecoveryPolicy />
</subscriptionRecoveryPolicy>
</policyEntry>
</policyEntries></policyMap>
</destinationPolicy>
<transportConnectors>
<transportConnector uri="tcp://localhost:61617"
discoveryUri="multicast://default"/>
</transportConnectors>
<networkConnectors>
<networkConnector uri="static://(tcp://localhost:61616)"
networkTTL="99"/>
</networkConnectors>
</broker>
Broker_C:
<broker brokerName="broker_C" useJmx="true"
xmlns="http://activemq.org/config/1.0">
<!-- Use the following to configure how ActiveMQ is exposed
in JMX
-->
<managementContext>
<managementContext connectorPort="6666"
jmxDomainName="org.apache.activemq"/>
</managementContext>
<persistenceAdapter>
<journaledJDBC journalLogFiles="5"
dataDirectory="${activemq.base}/activemq-data/broker_C/"/>
</persistenceAdapter>
<!-- In ActiveMQ 4, you can setup destination policies -->
<destinationPolicy>
<policyMap><policyEntries>
<policyEntry topic="FOO">
<dispatchPolicy>
<strictOrderDispatchPolicy />
</dispatchPolicy>
<subscriptionRecoveryPolicy>
<lastImageSubscriptionRecoveryPolicy />
</subscriptionRecoveryPolicy>
</policyEntry>
</policyEntries></policyMap>
</destinationPolicy>
<transportConnectors>
<transportConnector uri="tcp://localhost:61618"
discoveryUri="multicast://default"/>
</transportConnectors>
<networkConnectors>
<networkConnector uri="static://(tcp://localhost:61616)"
networkTTL="99"/>
</networkConnectors>
</broker>
Unfortunately, if i try to start to start active-mq via:
./activemq
i get the following output:
ACTIVEMQ_HOME: /opt/apache-activemq-4.1.1
ACTIVEMQ_BASE: /opt/apache-activemq-4.1.1
Loading message broker from: xbean:activemq.xml
INFO BrokerService - ActiveMQ 4.1.1 JMS Message
Broker
(broker_A) is starting
INFO BrokerService - For help or more information
please see: http://incubator.apache.org/activemq/
INFO ManagementContext - JMX consoles can connect to
service:jmx:rmi:///jndi/rmi://localhost:4444/jmxrmi
INFO JDBCPersistenceAdapter - Database driver recognized:
[apache_derby_embedded_jdbc_driver]
INFO DefaultDatabaseLocker - Attempting to acquire the
exclusive lock to become the Master broker
INFO DefaultDatabaseLocker - Becoming the master on
dataSource:
[EMAIL PROTECTED]
INFO JournalPersistenceAdapter - Journal Recovery Started
from:
Active Journal: using 5 x 20.0 Megs at:
/opt/apache-activemq-4.1.1/activemq-data/broker_A/journal
INFO JournalPersistenceAdapter - Journal Recovered: 0
message(s) in
transactions recovered.
INFO TransportServerThreadSupport - Listening for connections at:
tcp://debln099:61617
INFO TransportConnector - Connector tcp://localhost:
61617
Started
INFO NetworkConnector - Establishing network
connection
between from vm:?network=true to tcp://localhost:61616
INFO BrokerService - ActiveMQ 4.1.1 JMS Message
Broker
(null) is starting
INFO BrokerService - For help or more information
please see: http://incubator.apache.org/activemq/
INFO JDBCPersistenceAdapter - Database driver recognized:
[apache_derby_embedded_jdbc_driver]
INFO ManagementContext - JMX consoles can connect to
service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
INFO DefaultDatabaseLocker - Attempting to acquire the
exclusive lock to become the Master broker
INFO DefaultDatabaseLocker - Becoming the master on
dataSource:
[EMAIL PROTECTED]
INFO JournalPersistenceAdapter - Journal Recovery Started
from:
Active Journal: using 2 x 20.0 Megs at:
/opt/apache-activemq-4.1.1/bin/activemq-data/null/journal
INFO JournalPersistenceAdapter - Journal Recovered: 0
message(s) in
transactions recovered.
INFO BrokerService - ActiveMQ JMS Message
Broker (null,
ID:debln099-46244-1185883671408-1:1) started
INFO TransportConnector - Connector vm://null Started
WARN NetworkConnector - Could not start network
bridge
between: vm:?network=true and: tcp://localhost:61616 due to:
java.net.ConnectException: Connection refused
INFO NetworkConnector - Network Connector bridge
Started
INFO BrokerService - ActiveMQ JMS Message Broker
(broker_A, ID:debln099-46244-1185883671408-1:0) started
INFO NetworkConnector - Establishing network
connection
between from vm:?network=true to tcp://localhost:61616
INFO TransportConnector - Connector vm://null Stopped
INFO BrokerService - ActiveMQ 4.1.1 JMS Message
Broker
(null) is starting
INFO BrokerService - For help or more information
please see: http://incubator.apache.org/activemq/
INFO faultPersistenceAdapterFactory - Journal is locked...
waiting 10
seconds for the journal to be unlocked.
WARN ManagementContext - Failed to start jmx
connector:
Cannot bind to URL [rmi://localhost:1099/jmxrmi]:
javax.naming.NameAlreadyBoundException: jmxrmi [Root exception is
java.rmi.AlreadyBoundException: jmxrmi]
INFO faultPersistenceAdapterFactory - Journal is locked...
waiting 10
seconds for the journal to be unlocked.
INFO faultPersistenceAdapterFactory - Journal is locked...
waiting 10
seconds for the journal to be unlocked.
INFO faultPersistenceAdapterFactory - Journal is locked...
waiting 10
seconds for the journal to be unlocked.
INFO faultPersistenceAdapterFactory - Journal is locked...
waiting 10
seconds for the journal to be unlocked.
INFO faultPersistenceAdapterFactory - Journal is locked...
waiting 10
seconds for the journal to be unlocked.
INFO faultPersistenceAdapterFactory - Journal is locked...
waiting 10
seconds for the journal to be unlocked.
INFO faultPersistenceAdapterFactory - Journal is locked...
waiting 10
seconds for the journal to be unlocked.
INFO faultPersistenceAdapterFactory - Journal is locked...
waiting 10
seconds for the journal to be unlocked.
As you can see, only broker_A is starting.
Furthermore, every broker has a separate journal directory which
is empty
before starting AMQ:
<persistenceAdapter>
<journaledJDBC journalLogFiles="5"
dataDirectory="${activemq.base}/activemq-data/broker_C/"/>
</persistenceAdapter>
What the hack is wrong? To me the configuration seems to be
right, can
somebody release me from my misery?
Why do the journal lock error?
Thx in advance.....