Repository: activemq-artemis Updated Branches: refs/heads/master 585c978a4 -> 0cb63fb88
ARTEMIS-1443 Fix issue starting artemis in osgi with CORE protocol Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/59ec2296 Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/59ec2296 Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/59ec2296 Branch: refs/heads/master Commit: 59ec22962bc73a361009d62c8975a0c8acad77cc Parents: 585c978 Author: Ryan Yeats <[email protected]> Authored: Fri Sep 29 16:43:25 2017 -0700 Committer: Clebert Suconic <[email protected]> Committed: Mon Oct 2 20:30:34 2017 -0400 ---------------------------------------------------------------------- artemis-features/src/main/resources/artemis.xml | 145 +++++++++++++++---- .../src/main/resources/features.xml | 2 +- .../activemq/artemis/osgi/ProtocolTracker.java | 14 ++ 3 files changed, 134 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/59ec2296/artemis-features/src/main/resources/artemis.xml ---------------------------------------------------------------------- diff --git a/artemis-features/src/main/resources/artemis.xml b/artemis-features/src/main/resources/artemis.xml index 99db089..fa14495 100644 --- a/artemis-features/src/main/resources/artemis.xml +++ b/artemis-features/src/main/resources/artemis.xml @@ -22,28 +22,68 @@ under the License. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd"> - <jms xmlns="urn:activemq:jms"> - <queue name="DLQ"/> - <queue name="ExpiryQueue"/> - </jms> + <core xmlns="urn:activemq:core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="urn:activemq:core "> - <core xmlns="urn:activemq:core"> + <persistence-enabled>true</persistence-enabled> - <!-- this could be ASYNCIO or NIO --> + <!-- this could be ASYNCIO, MAPPED, NIO + ASYNCIO: Linux Libaio + MAPPED: mmap files + NIO: Plain Java Files + --> <journal-type>ASYNCIO</journal-type> - <paging-directory>./data/paging</paging-directory> - <bindings-directory>./data/bindings</bindings-directory> - <journal-directory>./data/journal</journal-directory> - <large-messages-directory>./data/large-messages</large-messages-directory> - <journal-min-files>10</journal-min-files> + + <paging-directory>./data/artemis/paging</paging-directory> + + <bindings-directory>./data/artemis/bindings</bindings-directory> + + <journal-directory>./data/artemis/journal</journal-directory> + + <large-messages-directory>./data/artemis/large-messages</large-messages-directory> + + <journal-datasync>true</journal-datasync> + + <journal-min-files>2</journal-min-files> + + <journal-pool-files>-1</journal-pool-files> + + <!-- + You can verify the network health of a particular NIC by specifying the <network-check-NIC> element. + <network-check-NIC>theNicName</network-check-NIC> + --> + + <!-- + Use this to use an HTTP server to validate the network + <network-check-URL-list>http://www.apache.org</network-check-URL-list> --> + + <!-- <network-check-period>10000</network-check-period> --> + <!-- <network-check-timeout>1000</network-check-timeout> --> + + <!-- this is a comma separated list, no spaces, just DNS or IPs + it should accept IPV6 + + Warning: Make sure you understand your network topology as this is meant to validate if your network is valid. + Using IPs that could eventually disappear or be partially visible may defeat the purpose. + You can use a list of multiple IPs, and if any successful ping will make the server OK to continue running --> + <!-- <network-check-list>10.0.0.1</network-check-list> --> + + <!-- use this to customize the ping used for ipv4 addresses --> + <!-- <network-check-ping-command>ping -c 1 -t %d %s</network-check-ping-command> --> + + <!-- use this to customize the ping used for ipv6 addresses --> + <!-- <network-check-ping6-command>ping6 -c 1 %2$s</network-check-ping6-command> --> + + <!-- This value was determined through a calculation. - Your system could perform 0.63 writes per millisecond + Your system could perform 20.83 writes per millisecond on the current journal configuration. - That translates as a sync write every 1591999 nanoseconds + That translates as a sync write every 48000 nanoseconds --> - <journal-buffer-timeout>1591999</journal-buffer-timeout> + <journal-buffer-timeout>48000</journal-buffer-timeout> + <!-- how often we are looking for how many bytes are being used on the disk in ms --> <disk-scan-period>5000</disk-scan-period> @@ -52,28 +92,49 @@ under the License. that won't support flow control. --> <max-disk-usage>90</max-disk-usage> + <!-- should the broker detect dead locks and other issues --> + <critical-analyzer>true</critical-analyzer> + + <critical-analyzer-timeout>120000</critical-analyzer-timeout> + + <critical-analyzer-check-period>60000</critical-analyzer-check-period> + + <critical-analyzer-policy>HALT</critical-analyzer-policy> + <!-- the system will enter into page mode once you hit this limit. - This is an estimate in bytes of how much the messages are using in memory --> + This is an estimate in bytes of how much the messages are using in memory + + The system will use half of the available memory (-Xmx) by default for the global-max-size. + You may specify a different value here if you need to customize it to your needs. + <global-max-size>100Mb</global-max-size> + --> + <acceptors> - <!-- Default ActiveMQ Artemis Acceptor. Multi-protocol adapter. Currently supports Core, OpenWire, Stomp and AMQP. --> - <!-- performance tests have shown that openWire performs best with these buffer sizes --> - <acceptor name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE</acceptor> + + <!-- useEpoll means: it will use Netty epoll if you are on a system (Linux) that supports it --> + <!-- amqpCredits: The number of credits sent to AMQP producers --> + <!-- amqpLowCredits: The server will send the # credits specified at amqpCredits at this low mark --> + + <!-- Acceptor for every supported protocol --> + <acceptor name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300</acceptor> <!-- AMQP Acceptor. Listens on default AMQP port for AMQP traffic.--> - <acceptor name="amqp">tcp://0.0.0.0:5672?protocols=AMQP</acceptor> + <acceptor name="amqp">tcp://0.0.0.0:5672?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=AMQP;useEpoll=true;amqpCredits=1000;amqpMinCredits=300</acceptor> <!-- STOMP Acceptor. --> - <acceptor name="stomp">tcp://0.0.0.0:61613?protocols=STOMP</acceptor> + <acceptor name="stomp">tcp://0.0.0.0:61613?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=STOMP;useEpoll=true</acceptor> - <!-- HornetQ Compatibility Acceptor. Enables ActiveMQ Artemis Core and STOMP for legacy HornetQ clients. --> - <acceptor name="hornetq">tcp://0.0.0.0:5445?protocols=HORNETQ,STOMP</acceptor> + <!-- HornetQ Compatibility Acceptor. Enables HornetQ Core and STOMP for legacy HornetQ clients. --> + <acceptor name="hornetq">tcp://0.0.0.0:5445?protocols=HORNETQ,STOMP;useEpoll=true</acceptor> <!-- MQTT Acceptor --> - <acceptor name="mqtt">tcp://0.0.0.0:1883?protocols=MQTT</acceptor> + <acceptor name="mqtt">tcp://0.0.0.0:1883?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=MQTT;useEpoll=true</acceptor> + </acceptors> + <security-settings> <security-setting match="#"> <permission type="createNonDurableQueue" roles="manager"/> @@ -83,25 +144,57 @@ under the License. <permission type="createAddress" roles="manager"/> <permission type="deleteAddress" roles="manager"/> <permission type="consume" roles="manager"/> - <permission type="send" roles="manager"/> <permission type="browse" roles="manager"/> + <permission type="send" roles="manager"/> <!-- we need this otherwise ./artemis data imp wouldn't work --> <permission type="manage" roles="manager"/> </security-setting> </security-settings> <address-settings> + <!-- if you define auto-create on certain queues, management has to be auto-create --> + <address-setting match="activemq.management#"> + <dead-letter-address>DLQ</dead-letter-address> + <expiry-address>ExpiryQueue</expiry-address> + <redelivery-delay>0</redelivery-delay> + <!-- with -1 only the global-max-size is in use for limiting --> + <max-size-bytes>-1</max-size-bytes> + <message-counter-history-day-limit>10</message-counter-history-day-limit> + <address-full-policy>PAGE</address-full-policy> + <auto-create-queues>true</auto-create-queues> + <auto-create-addresses>true</auto-create-addresses> + <auto-create-jms-queues>true</auto-create-jms-queues> + <auto-create-jms-topics>true</auto-create-jms-topics> + </address-setting> <!--default for catch all--> <address-setting match="#"> - <dead-letter-address>jms.queue.DLQ</dead-letter-address> - <expiry-address>jms.queue.ExpiryQueue</expiry-address> + <dead-letter-address>DLQ</dead-letter-address> + <expiry-address>ExpiryQueue</expiry-address> <redelivery-delay>0</redelivery-delay> <!-- with -1 only the global-max-size is in use for limiting --> <max-size-bytes>-1</max-size-bytes> <message-counter-history-day-limit>10</message-counter-history-day-limit> <address-full-policy>PAGE</address-full-policy> <auto-create-queues>true</auto-create-queues> + <auto-create-addresses>true</auto-create-addresses> + <auto-create-jms-queues>true</auto-create-jms-queues> + <auto-create-jms-topics>true</auto-create-jms-topics> </address-setting> </address-settings> + + <addresses> + <address name="DLQ"> + <anycast> + <queue name="DLQ" /> + </anycast> + </address> + <address name="ExpiryQueue"> + <anycast> + <queue name="ExpiryQueue" /> + </anycast> + </address> + + </addresses> + </core> </configuration> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/59ec2296/artemis-features/src/main/resources/features.xml ---------------------------------------------------------------------- diff --git a/artemis-features/src/main/resources/features.xml b/artemis-features/src/main/resources/features.xml index bae4a4c..45094d5 100644 --- a/artemis-features/src/main/resources/features.xml +++ b/artemis-features/src/main/resources/features.xml @@ -87,7 +87,7 @@ <bundle>mvn:org.apache.activemq/artemis-hornetq-protocol/${pom.version}</bundle> </feature> - <feature name="artemis-openwire" version="${pom.version}" description="ActiveMQ Artemis HornetQ protocol libraries"> + <feature name="artemis-openwire" version="${pom.version}" description="ActiveMQ Artemis Openwire protocol libraries"> <feature>artemis-core</feature> <bundle dependency="true">mvn:org.fusesource.hawtbuf/hawtbuf/1.11</bundle> <bundle>mvn:org.apache.geronimo.specs/geronimo-j2ee-management_1.1_spec/1.0.1</bundle> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/59ec2296/artemis-server-osgi/src/main/java/org/apache/activemq/artemis/osgi/ProtocolTracker.java ---------------------------------------------------------------------- diff --git a/artemis-server-osgi/src/main/java/org/apache/activemq/artemis/osgi/ProtocolTracker.java b/artemis-server-osgi/src/main/java/org/apache/activemq/artemis/osgi/ProtocolTracker.java index 5ab2d3a..8e09129 100644 --- a/artemis-server-osgi/src/main/java/org/apache/activemq/artemis/osgi/ProtocolTracker.java +++ b/artemis-server-osgi/src/main/java/org/apache/activemq/artemis/osgi/ProtocolTracker.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import org.apache.activemq.artemis.api.core.Interceptor; +import org.apache.activemq.artemis.api.core.client.ActiveMQClient; import org.apache.activemq.artemis.spi.core.protocol.ProtocolManagerFactory; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; @@ -54,6 +55,19 @@ public class ProtocolTracker implements ServiceTrackerCustomizer<ProtocolManager this.protocols.put(requiredProtocol, false); } ActiveMQOsgiLogger.LOGGER.brokerConfigFound(name, Arrays.asList(requiredProtocols).toString()); + + //CORE is always registered as a protocol in RemoteServiceImpl + this.protocols.put(ActiveMQClient.DEFAULT_CORE_PROTOCOL, true); + + //if no protocols are specified we need to start artemis + List<String> missing = getMissing(); + if (missing.isEmpty()) { + try { + callback.start(); + } catch (Exception e) { + ActiveMQOsgiLogger.LOGGER.errorStartingBroker(e, name); + } + } } @Override
