mirror of https://github.com/apache/activemq.git
git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@660977 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ec80f286d2
commit
4ee029ef4e
|
@ -333,6 +333,27 @@ public class AdvisoryBroker extends BrokerFilter {
|
||||||
LOG.warn("Failed to fire message is full advisory");
|
LOG.warn("Failed to fire message is full advisory");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void nowMasterBroker() {
|
||||||
|
super.nowMasterBroker();
|
||||||
|
try {
|
||||||
|
ActiveMQTopic topic = AdvisorySupport.getMasterBrokerAdvisoryTopic();
|
||||||
|
ActiveMQMessage advisoryMessage = new ActiveMQMessage();
|
||||||
|
advisoryMessage.setStringProperty("brokerName", getBrokerName());
|
||||||
|
String[] uris = getBrokerService().getTransportConnectorURIs();
|
||||||
|
String uri = getBrokerService().getVmConnectorURI().toString();
|
||||||
|
if (uris != null && uris.length > 0) {
|
||||||
|
uri = uris[0];
|
||||||
|
}
|
||||||
|
advisoryMessage.setStringProperty("brokerURL", getBrokerName());
|
||||||
|
advisoryMessage.setStringProperty("brokerURI", uri);
|
||||||
|
ConnectionContext context = new ConnectionContext();
|
||||||
|
context.setBroker(getBrokerService().getBroker());
|
||||||
|
fireAdvisory(context, topic,advisoryMessage);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("Failed to fire message master broker advisory");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void fireAdvisory(ConnectionContext context, ActiveMQTopic topic, Command command) throws Exception {
|
protected void fireAdvisory(ConnectionContext context, ActiveMQTopic topic, Command command) throws Exception {
|
||||||
fireAdvisory(context, topic, command, null);
|
fireAdvisory(context, topic, command, null);
|
||||||
|
|
|
@ -45,6 +45,7 @@ public final class AdvisorySupport {
|
||||||
public static final String FULL_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "FULL.";
|
public static final String FULL_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "FULL.";
|
||||||
public static final String MESSAGE_DELIVERED_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "MessageDelivered.";
|
public static final String MESSAGE_DELIVERED_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "MessageDelivered.";
|
||||||
public static final String MESSAGE_CONSUMED_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "MessageConsumed.";
|
public static final String MESSAGE_CONSUMED_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "MessageConsumed.";
|
||||||
|
public static final String MASTER_BROKER_TOPIC_PREFIX = ADVISORY_TOPIC_PREFIX + "MasterBroker";
|
||||||
public static final String AGENT_TOPIC = "ActiveMQ.Agent";
|
public static final String AGENT_TOPIC = "ActiveMQ.Agent";
|
||||||
public static final String ADIVSORY_MESSAGE_TYPE = "Advisory";
|
public static final String ADIVSORY_MESSAGE_TYPE = "Advisory";
|
||||||
public static final String MSG_PROPERTY_ORIGIN_BROKER_ID="originBrokerId";
|
public static final String MSG_PROPERTY_ORIGIN_BROKER_ID="originBrokerId";
|
||||||
|
@ -137,6 +138,10 @@ public final class AdvisorySupport {
|
||||||
return new ActiveMQTopic(name);
|
return new ActiveMQTopic(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ActiveMQTopic getMasterBrokerAdvisoryTopic() {
|
||||||
|
return new ActiveMQTopic(MASTER_BROKER_TOPIC_PREFIX);
|
||||||
|
}
|
||||||
|
|
||||||
public static ActiveMQTopic getFullAdvisoryTopic(ActiveMQDestination destination) {
|
public static ActiveMQTopic getFullAdvisoryTopic(ActiveMQDestination destination) {
|
||||||
String name = FULL_TOPIC_PREFIX
|
String name = FULL_TOPIC_PREFIX
|
||||||
+ destination.getDestinationTypeAsString() + "."
|
+ destination.getDestinationTypeAsString() + "."
|
||||||
|
@ -272,6 +277,20 @@ public final class AdvisorySupport {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isMasterBrokerAdvisoryTopic(ActiveMQDestination destination) {
|
||||||
|
if (destination.isComposite()) {
|
||||||
|
ActiveMQDestination[] compositeDestinations = destination.getCompositeDestinations();
|
||||||
|
for (int i = 0; i < compositeDestinations.length; i++) {
|
||||||
|
if (isMasterBrokerAdvisoryTopic(compositeDestinations[i])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return destination.isTopic() && destination.getPhysicalName().startsWith(MASTER_BROKER_TOPIC_PREFIX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isMessageDeliveredAdvisoryTopic(ActiveMQDestination destination) {
|
public static boolean isMessageDeliveredAdvisoryTopic(ActiveMQDestination destination) {
|
||||||
if (destination.isComposite()) {
|
if (destination.isComposite()) {
|
||||||
ActiveMQDestination[] compositeDestinations = destination.getCompositeDestinations();
|
ActiveMQDestination[] compositeDestinations = destination.getCompositeDestinations();
|
||||||
|
|
|
@ -365,6 +365,12 @@ public interface Broker extends Region, Service {
|
||||||
* @param usage
|
* @param usage
|
||||||
*/
|
*/
|
||||||
void isFull(ConnectionContext context,Destination destination,Usage usage);
|
void isFull(ConnectionContext context,Destination destination,Usage usage);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* called when the broker becomes the master in a master/slave
|
||||||
|
* configuration
|
||||||
|
*/
|
||||||
|
void nowMasterBroker();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -290,4 +290,8 @@ public class BrokerFilter implements Broker {
|
||||||
public void slowConsumer(ConnectionContext context, Destination destination,Subscription subs) {
|
public void slowConsumer(ConnectionContext context, Destination destination,Subscription subs) {
|
||||||
next.slowConsumer(context, destination,subs);
|
next.slowConsumer(context, destination,subs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void nowMasterBroker() {
|
||||||
|
next.nowMasterBroker();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -409,6 +409,7 @@ public class BrokerService implements Service {
|
||||||
LOG.warn("Master Failed - starting all connectors");
|
LOG.warn("Master Failed - starting all connectors");
|
||||||
try {
|
try {
|
||||||
startAllConnectors();
|
startAllConnectors();
|
||||||
|
broker.nowMasterBroker();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOG.error("Failed to startAllConnectors");
|
LOG.error("Failed to startAllConnectors");
|
||||||
}
|
}
|
||||||
|
|
|
@ -221,7 +221,7 @@ public class EmptyBroker implements Broker {
|
||||||
public void setAdminConnectionContext(ConnectionContext adminConnectionContext) {
|
public void setAdminConnectionContext(ConnectionContext adminConnectionContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Response messagePull(ConnectionContext context, MessagePull pull) {
|
public Response messagePull(ConnectionContext context, MessagePull pull) throws Exception {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -275,4 +275,7 @@ public class EmptyBroker implements Broker {
|
||||||
|
|
||||||
public void slowConsumer(ConnectionContext context,Destination destination, Subscription subs) {
|
public void slowConsumer(ConnectionContext context,Destination destination, Subscription subs) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void nowMasterBroker() {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -292,4 +292,8 @@ public class ErrorBroker implements Broker {
|
||||||
public void slowConsumer(ConnectionContext context, Destination destination,Subscription subs) {
|
public void slowConsumer(ConnectionContext context, Destination destination,Subscription subs) {
|
||||||
throw new BrokerStoppedException(this.message);
|
throw new BrokerStoppedException(this.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void nowMasterBroker() {
|
||||||
|
throw new BrokerStoppedException(this.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -302,5 +302,9 @@ public class MutableBrokerFilter implements Broker {
|
||||||
public void slowConsumer(ConnectionContext context, Destination dest, Subscription subs) {
|
public void slowConsumer(ConnectionContext context, Destination dest, Subscription subs) {
|
||||||
getNext().slowConsumer(context, dest,subs);
|
getNext().slowConsumer(context, dest,subs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void nowMasterBroker() {
|
||||||
|
getNext().nowMasterBroker();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,15 +25,14 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
|
||||||
import javax.jms.InvalidClientIDException;
|
import javax.jms.InvalidClientIDException;
|
||||||
import javax.jms.JMSException;
|
import javax.jms.JMSException;
|
||||||
|
|
||||||
import org.apache.activemq.broker.Broker;
|
import org.apache.activemq.broker.Broker;
|
||||||
import org.apache.activemq.broker.BrokerService;
|
import org.apache.activemq.broker.BrokerService;
|
||||||
import org.apache.activemq.broker.Connection;
|
import org.apache.activemq.broker.Connection;
|
||||||
import org.apache.activemq.broker.ConnectionContext;
|
import org.apache.activemq.broker.ConnectionContext;
|
||||||
import org.apache.activemq.broker.ConsumerBrokerExchange;
|
import org.apache.activemq.broker.ConsumerBrokerExchange;
|
||||||
|
import org.apache.activemq.broker.EmptyBroker;
|
||||||
import org.apache.activemq.broker.ProducerBrokerExchange;
|
import org.apache.activemq.broker.ProducerBrokerExchange;
|
||||||
import org.apache.activemq.broker.region.policy.DeadLetterStrategy;
|
import org.apache.activemq.broker.region.policy.DeadLetterStrategy;
|
||||||
import org.apache.activemq.broker.region.policy.PolicyMap;
|
import org.apache.activemq.broker.region.policy.PolicyMap;
|
||||||
|
@ -52,13 +51,11 @@ import org.apache.activemq.command.MessagePull;
|
||||||
import org.apache.activemq.command.ProducerInfo;
|
import org.apache.activemq.command.ProducerInfo;
|
||||||
import org.apache.activemq.command.RemoveSubscriptionInfo;
|
import org.apache.activemq.command.RemoveSubscriptionInfo;
|
||||||
import org.apache.activemq.command.Response;
|
import org.apache.activemq.command.Response;
|
||||||
import org.apache.activemq.command.SessionInfo;
|
|
||||||
import org.apache.activemq.command.TransactionId;
|
import org.apache.activemq.command.TransactionId;
|
||||||
import org.apache.activemq.kaha.Store;
|
import org.apache.activemq.kaha.Store;
|
||||||
import org.apache.activemq.state.ConnectionState;
|
import org.apache.activemq.state.ConnectionState;
|
||||||
import org.apache.activemq.thread.TaskRunnerFactory;
|
import org.apache.activemq.thread.TaskRunnerFactory;
|
||||||
import org.apache.activemq.usage.SystemUsage;
|
import org.apache.activemq.usage.SystemUsage;
|
||||||
import org.apache.activemq.usage.Usage;
|
|
||||||
import org.apache.activemq.util.BrokerSupport;
|
import org.apache.activemq.util.BrokerSupport;
|
||||||
import org.apache.activemq.util.IdGenerator;
|
import org.apache.activemq.util.IdGenerator;
|
||||||
import org.apache.activemq.util.LongSequenceGenerator;
|
import org.apache.activemq.util.LongSequenceGenerator;
|
||||||
|
@ -71,7 +68,7 @@ import org.apache.commons.logging.LogFactory;
|
||||||
*
|
*
|
||||||
* @version $Revision$
|
* @version $Revision$
|
||||||
*/
|
*/
|
||||||
public class RegionBroker implements Broker {
|
public class RegionBroker extends EmptyBroker {
|
||||||
private static final Log LOG = LogFactory.getLog(RegionBroker.class);
|
private static final Log LOG = LogFactory.getLog(RegionBroker.class);
|
||||||
private static final IdGenerator BROKER_ID_GENERATOR = new IdGenerator();
|
private static final IdGenerator BROKER_ID_GENERATOR = new IdGenerator();
|
||||||
|
|
||||||
|
@ -324,12 +321,6 @@ public class RegionBroker implements Broker {
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSession(ConnectionContext context, SessionInfo info) throws Exception {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeSession(ConnectionContext context, SessionInfo info) throws Exception {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addProducer(ConnectionContext context, ProducerInfo info)
|
public void addProducer(ConnectionContext context, ProducerInfo info)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
ActiveMQDestination destination = info.getDestination();
|
ActiveMQDestination destination = info.getDestination();
|
||||||
|
@ -619,10 +610,6 @@ public class RegionBroker implements Broker {
|
||||||
return destinationFactory.getDestinations();
|
return destinationFactory.getDestinations();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isFaultTolerantConfiguration() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void doStop(ServiceStopper ss) {
|
protected void doStop(ServiceStopper ss) {
|
||||||
ss.stop(queueRegion);
|
ss.stop(queueRegion);
|
||||||
ss.stop(topicRegion);
|
ss.stop(topicRegion);
|
||||||
|
@ -680,24 +667,6 @@ public class RegionBroker implements Broker {
|
||||||
getRoot().sendToDeadLetterQueue(context, node);
|
getRoot().sendToDeadLetterQueue(context, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void fastProducer(ConnectionContext context,ProducerInfo producerInfo) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void isFull(ConnectionContext context,Destination destination, Usage usage) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void messageConsumed(ConnectionContext context,MessageReference messageReference) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void messageDelivered(ConnectionContext context,MessageReference messageReference) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void messageDiscarded(ConnectionContext context,MessageReference messageReference) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void slowConsumer(ConnectionContext context, Destination dest, Subscription subs) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sendToDeadLetterQueue(ConnectionContext context,
|
public void sendToDeadLetterQueue(ConnectionContext context,
|
||||||
MessageReference node){
|
MessageReference node){
|
||||||
try{
|
try{
|
||||||
|
|
|
@ -921,7 +921,7 @@ public class AMQPersistenceAdapter implements PersistenceAdapter, UsageListener,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected void lock() throws IOException, InterruptedException {
|
protected void lock() throws Exception {
|
||||||
boolean logged = false;
|
boolean logged = false;
|
||||||
boolean aquiredLock = false;
|
boolean aquiredLock = false;
|
||||||
do {
|
do {
|
||||||
|
@ -937,6 +937,9 @@ public class AMQPersistenceAdapter implements PersistenceAdapter, UsageListener,
|
||||||
|
|
||||||
if (aquiredLock && logged) {
|
if (aquiredLock && logged) {
|
||||||
LOG.info("Aquired lock for AMQ Store" + getDirectory());
|
LOG.info("Aquired lock for AMQ Store" + getDirectory());
|
||||||
|
if (brokerService != null) {
|
||||||
|
brokerService.getBroker().nowMasterBroker();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} while (!aquiredLock && !disableLocking);
|
} while (!aquiredLock && !disableLocking);
|
||||||
|
|
|
@ -175,6 +175,9 @@ public class JDBCPersistenceAdapter extends DataSourceSupport implements Persist
|
||||||
LOG.warn("No databaseLocker configured for the JDBC Persistence Adapter");
|
LOG.warn("No databaseLocker configured for the JDBC Persistence Adapter");
|
||||||
} else {
|
} else {
|
||||||
service.start();
|
service.start();
|
||||||
|
if (brokerService != null) {
|
||||||
|
brokerService.getBroker().nowMasterBroker();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue