/** * CopyRight by Chinamobile * * ActiveMQBroker.java */ package com.chinamobile.bcbsp; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java.lang.management.MemoryUsage; import java.util.ArrayList; import java.util.List; import org.apache.activemq.broker.BrokerService; import org.apache.activemq.broker.region.policy.PolicyEntry; import org.apache.activemq.broker.region.policy.PolicyMap; public final class ActiveMQBroker { BrokerService broker; String brokerName = "localhost"; public ActiveMQBroker(String brokerName) { this.brokerName = brokerName; } public static void main(String[] args) throws Exception { String hostName = args[0]; BrokerService broker = new BrokerService(); broker.setBrokerName(hostName); broker.setDataDirectory("activemq_data/"); broker.setUseJmx(true); broker.setPersistent(false); broker.addConnector("tcp://0.0.0.0:61616"); broker.start(); System.out.println("Start broker successfully!"); // now lets wait forever to avoid the JVM terminating immediately Object lock = new Object(); synchronized (lock) { lock.wait(); } System.out.println("Run over."); } public void startBroker(int port) throws Exception { broker = new BrokerService(); broker.setBrokerName(this.brokerName); broker.setUseJmx(true); broker.setPersistent(false); broker.getSystemUsage().getMemoryUsage().setLimit(512*1024*1024); List<PolicyEntry> entries = new ArrayList<PolicyEntry>(); PolicyEntry policy = new PolicyEntry(); MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); MemoryUsage memoryUsage = memoryMXBean.getHeapMemoryUsage(); long max = memoryUsage.getMax(); long memoryLimit = max/2; policy.setMemoryLimit(memoryLimit); policy.setQueue("BSP"); entries.add(policy); PolicyMap policyMap = new PolicyMap(); policyMap.setDefaultEntry(policy); policyMap.setPolicyEntries(entries); broker.setDestinationPolicy(policyMap); String connectortUri = "tcp://0.0.0.0:" + port; broker.addConnector(connectortUri); broker.start(); } public void stopBroker() throws Exception { if (broker != null) { broker.stop(); } } }