[ 
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)

Reply via email to