You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Michal Toth (JIRA)" <ji...@apache.org> on 2017/10/11 07:39:00 UTC

[jira] [Closed] (ARTEMIS-1458) Diverts are not working with AMQP protocol

     [ https://issues.apache.org/jira/browse/ARTEMIS-1458?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Michal Toth closed ARTEMIS-1458.
--------------------------------
    Resolution: Fixed

> Diverts are not working with AMQP protocol
> ------------------------------------------
>
>                 Key: ARTEMIS-1458
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-1458
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>          Components: AMQP, Broker
>    Affects Versions: 2.3.0
>         Environment: Diverts exclusive/non-exclusive
> AMQP protocol
>            Reporter: Michal Toth
>
> Both type of diverts are not working with AMQP protocol. Openwire is affected as well.
> With Core protocol, I could see messages going as expected to "spyDivert" queue.
> Broker stacktrace error
> {noformat}
> 13:04:09,878 WARN  [org.apache.activemq.artemis.protocol.amqp.proton.ProtonServerReceiverContext] null: java.lang.NullPointerException
>         at org.apache.activemq.artemis.protocol.amqp.broker.AMQPMessage.setRoutingType(AMQPMessage.java:292) [artemis-amqp-protocol-2.0.0.amq-700013-redhat-1.jar:]
>         at org.apache.activemq.artemis.core.server.impl.DivertImpl.route(DivertImpl.java:117) [artemis-server-2.0.0.amq-700013-redhat-1.jar:2.0.0.amq-700013-redhat-1]
>         at org.apache.activemq.artemis.core.postoffice.impl.BindingsImpl.route(BindingsImpl.java:263) [artemis-server-2.0.0.amq-700013-redhat-1.jar:2.0.0.amq-700013-redhat-1]
>         at org.apache.activemq.artemis.core.postoffice.impl.BindingsImpl.route(BindingsImpl.java:232) [artemis-server-2.0.0.amq-700013-redhat-1.jar:2.0.0.amq-700013-redhat-1]
>         at org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.route(PostOfficeImpl.java:765) [artemis-server-2.0.0.amq-700013-redhat-1.jar:2.0.0.amq-700013-redhat-1]
>         at org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl.route(PostOfficeImpl.java:722) [artemis-server-2.0.0.amq-700013-redhat-1.jar:2.0.0.amq-700013-redhat-1]
>         at org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.doSend(ServerSessionImpl.java:1665) [artemis-server-2.0.0.amq-700013-redhat-1.jar:2.0.0.amq-700013-redhat-1]
>         at org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.send(ServerSessionImpl.java:1348) [artemis-server-2.0.0.amq-700013-redhat-1.jar:2.0.0.amq-700013-redhat-1]
>         at org.apache.activemq.artemis.protocol.amqp.broker.AMQPSessionCallback.serverSend(AMQPSessionCallback.java:433) [artemis-amqp-protocol-2.0.0.amq-700013-redhat-1.jar:]
>         at org.apache.activemq.artemis.protocol.amqp.broker.AMQPSessionCallback.serverSend(AMQPSessionCallback.java:404) [artemis-amqp-protocol-2.0.0.amq-700013-redhat-1.jar:]
>         at org.apache.activemq.artemis.protocol.amqp.proton.ProtonServerReceiverContext.onMessage(ProtonServerReceiverContext.java:172) [artemis-amqp-protocol-2.0.0.amq-700013-redhat-1.jar:]
>         at org.apache.activemq.artemis.protocol.amqp.proton.AMQPConnectionContext.onDelivery(AMQPConnectionContext.java:496) [artemis-amqp-protocol-2.0.0.amq-700013-redhat-1.jar:]
>         at org.apache.activemq.artemis.protocol.amqp.proton.handler.Events.dispatch(Events.java:92) [artemis-amqp-protocol-2.0.0.amq-700013-redhat-1.jar:]
>         at org.apache.activemq.artemis.protocol.amqp.proton.handler.ProtonHandler.dispatch(ProtonHandler.java:330) [artemis-amqp-protocol-2.0.0.amq-700013-redhat-1.jar:]
>         at org.apache.activemq.artemis.protocol.amqp.proton.handler.ProtonHandler.flush(ProtonHandler.java:259) [artemis-amqp-protocol-2.0.0.amq-700013-redhat-1.jar:]
>         at org.apache.activemq.artemis.protocol.amqp.proton.handler.ProtonHandler.inputBuffer(ProtonHandler.java:223) [artemis-amqp-protocol-2.0.0.amq-700013-redhat-1.jar:]
>         at org.apache.activemq.artemis.protocol.amqp.proton.AMQPConnectionContext.inputBuffer(AMQPConnectionContext.java:124) [artemis-amqp-protocol-2.0.0.amq-700013-redhat-1.jar:]
>         at org.apache.activemq.artemis.protocol.amqp.broker.ActiveMQProtonRemotingConnection.bufferReceived(ActiveMQProtonRemotingConnection.java:138) [artemis-amqp-protocol-2.0.0.amq-700013-redhat-1.jar:]
>         at org.apache.activemq.artemis.core.remoting.server.impl.RemotingServiceImpl$DelegatingBufferHandler.bufferReceived(RemotingServiceImpl.java:628) [artemis-server-2.0.0.amq-700013-redhat-1.jar:2.0.0.amq-700013-redhat-1]
>         at org.apache.activemq.artemis.core.remoting.impl.netty.ActiveMQChannelHandler.channelRead(ActiveMQChannelHandler.java:69) [artemis-core-client-2.0.0.amq-700013-redhat-1.jar:2.0.0.amq-700013-redhat-1]
>         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-all-4.1.9.Final-redhat-2.jar:4.1.9.Final-redhat-2]
>         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-all-4.1.9.Final-redhat-2.jar:4.1.9.Final-redhat-2]
>         at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-all-4.1.9.Final-redhat-2.jar:4.1.9.Final-redhat-2]
>         at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334) [netty-all-4.1.9.Final-redhat-2.jar:4.1.9.Final-redhat-2]
>         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-all-4.1.9.Final-redhat-2.jar:4.1.9.Final-redhat-2]
>         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-all-4.1.9.Final-redhat-2.jar:4.1.9.Final-redhat-2]
>         at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926) [netty-all-4.1.9.Final-redhat-2.jar:4.1.9.Final-redhat-2]
>         at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:1017) [netty-all-4.1.9.Final-redhat-2.jar:4.1.9.Final-redhat-2]
>         at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:394) [netty-all-4.1.9.Final-redhat-2.jar:4.1.9.Final-redhat-2]
>         at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:299) [netty-all-4.1.9.Final-redhat-2.jar:4.1.9.Final-redhat-2]
>         at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) [netty-all-4.1.9.Final-redhat-2.jar:4.1.9.Final-redhat-2]
>         at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_141]
> 13:04:10,218 WARN  [org.apache.activemq.artemis.core.server] AMQ222061: Client connection failed, clearing up resources for session bdc2917f-adaa-11e7-8016-525400061be7
> 13:04:10,218 WARN  [org.apache.activemq.artemis.core.server] AMQ222107: Cleared up resources for session bdc2917f-adaa-11e7-8016-525400061be7
> 13:04:10,218 WARN  [org.apache.activemq.artemis.core.server] AMQ222061: Client connection failed, clearing up resources for session bdc68920-adaa-11e7-8016-525400061be7
> 13:04:10,219 WARN  [org.apache.activemq.artemis.core.server] AMQ222107: Cleared up resources for session bdc68920-adaa-11e7-8016-525400061be7
> {noformat}
> Client error
> {noformat}
> $ java  -jar /var/dtests/node_data/clients/aac1.jar sender --log-msgs dict --broker <broker>:61616 --conn-username admin --conn-password admin --address testDivert --count 1
> 13:04:09,890 ERROR Error while sending a message!
> javax.jms.JMSException: Received error from remote peer without description [condition = failed]
> 	at org.apache.qpid.jms.provider.amqp.AmqpSupport.convertToException(AmqpSupport.java:164)
> 	at org.apache.qpid.jms.provider.amqp.AmqpSupport.convertToException(AmqpSupport.java:117)
> 	at org.apache.qpid.jms.provider.amqp.AmqpFixedProducer.processDeliveryUpdates(AmqpFixedProducer.java:236)
> 	at org.apache.qpid.jms.provider.amqp.AmqpProvider.processUpdates(AmqpProvider.java:908)
> 	at org.apache.qpid.jms.provider.amqp.AmqpProvider.access$1800(AmqpProvider.java:93)
> 	at org.apache.qpid.jms.provider.amqp.AmqpProvider$18.run(AmqpProvider.java:789)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> 	at java.lang.Thread.run(Thread.java:748)
> {noformat}
> {code:xml}
> <configuration xmlns="urn:activemq"
>                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>                xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd">
>    <core xmlns="urn:activemq:core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>          xsi:schemaLocation="urn:activemq:core ">
>       <name>amq</name>
>       <persistence-enabled>true</persistence-enabled>
>       <!-- this could be ASYNCIO or NIO
>        -->
>       <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-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.25 writes per millisecond
>        on the current journal configuration.
>        That translates as a sync write every 4020000 nanoseconds
>       -->
>       <journal-buffer-timeout>4020000</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>
>       <!-- once the disk hits this limit the system will block, or close the connection in certain protocols
>            that won't support flow control. -->
>       <max-disk-usage>90</max-disk-usage>
>       <!-- 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 -->
>       <global-max-size>100Mb</global-max-size>
>       <!-- 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>
>       <diverts>
>         <divert name="test-divert">
> <!--	  <routing-name>testDivert</routing-name>  -->
>           <address>testDivert</address>
>           <forwarding-address>spyDivert</forwarding-address>
>           <exclusive>true</exclusive>
>         </divert>
>       </diverts>
>       <acceptors>
>          <!-- 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?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=AMQP;useEpoll=true;amqpCredits=1000;amqpMinCredits=300</acceptor>
>          <!-- STOMP Acceptor. -->
>          <acceptor name="stomp">tcp://0.0.0.0:61613?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=STOMP;useEpoll=true</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?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=MQTT;useEpoll=true</acceptor>
>       </acceptors>
>       <security-settings>
>          <security-setting match="#">
>             <permission type="createNonDurableQueue" roles="amq"/>
>             <permission type="deleteNonDurableQueue" roles="amq"/>
>             <permission type="createDurableQueue" roles="amq"/>
>             <permission type="deleteDurableQueue" roles="amq"/>
>             <permission type="createAddress" roles="amq"/>
>             <permission type="deleteAddress" roles="amq"/>
>             <permission type="consume" roles="amq"/>
>             <permission type="browse" roles="amq"/>
>             <permission type="send" roles="amq"/>
>             <!-- we need this otherwise ./artemis data imp wouldn't work -->
>             <permission type="manage" roles="amq"/>
>          </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>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="testDivert">
> 	  <anycast>
> 		<queue name="testDivert"/>
> 	  </anycast> 
> 	</address>
> 	<address name="spyDivert">
> 	    <anycast>
> 		<queue name="spyDivert"/>
> 	    </anycast>
> 	</address>
>          <address name="DLQ">
>             <anycast>
>                <queue name="DLQ" />
>             </anycast>
>          </address>
>          <address name="ExpiryQueue">
>             <anycast>
>                <queue name="ExpiryQueue" />
>             </anycast>
>          </address>
>       </addresses>
>    </core>
> </configuration>
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)