You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Keith Wall (JIRA)" <ji...@apache.org> on 2014/01/05 20:30:50 UTC

[jira] [Commented] (QPID-5420) Creating consumer for Destination specifying the no-name exchange in binding url syntax fails against Java Broker.

    [ https://issues.apache.org/jira/browse/QPID-5420?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13862637#comment-13862637 ] 

Keith Wall commented on QPID-5420:
----------------------------------

I've taken a closer look at this defect.  I can see that the behaviour when publishing/consuming using a BURL specifying the default exchange has changed a number of times over recent releases.  I've summarised the behaviour in the table below:

||release||system property qpid.declare_exchanges||0-10||0-9||
|trunk|true| fails *1 | fails *1|
|trunk|false| functions #2 |fails *3 |
|0.24|true| fails *1 | fails *1 |
|0.24|false| functions #2 | fails *3 |
|0.22|true| fails *2 | functions #1 |
|0.20|true|fails *2 | functions #1 |
|0.18|true| fails *2 | functions #1 |

*1 = Fails, Attempt to declare exchange:  which begins with reserved name or prefix.
*2 = Fails, Bind not allowed for default exchange
*3 = Fails, Error sending exchange bound, (broker fails with "Exchange exchange must not be null" and closes connection).

#1 = Functions, but received message has JMSDestination = direct://<<default>>/myqueue/myqueue?routingkey='my queue'
#2 = Functions, but received message has JMSDestination = :///myqueue/myqueue?routingkey='my queue'

In other words, for 0-9:
* Publishing/consuming with BURL with default exchange worked <= 0.22.
* At 0.24/trunk, QPID-4897 changed the client to send exchange.bound, but unfortunately, the Java Broker (0-8..0-9-1 path fails with a NPE (ExchangeBoundHandler.java) if exchange.bound queries the default exchange (error - *3).  Also QPID-4973, changed the Broker (AbstractVirtualHost.java) to mean that attempts to actively declare the default exchange fail (error - *1)

For 0-10:
* Publishing/consuming with BURL with default exchange failed <= 0.22 (error - *2).
* At 0.24/trunk changes to client ( QPID-4897) means that client no longer tries to bind to the default exchange, so Publishing/consuming with BURL with default exchange works if qpid.declare_exchanges is false.  If qpid.declare_exchanges is true, like 0-9, it fails (error - *1)



> Creating consumer for Destination specifying the no-name exchange in binding url syntax fails against Java Broker.
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: QPID-5420
>                 URL: https://issues.apache.org/jira/browse/QPID-5420
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Broker, Java Client
>    Affects Versions: 0.24, 0.26, 0.27
>            Reporter: Keith Wall
>         Attachments: 0001-QPID-5420-WIP-Proposed-fix-tests.patch
>
>
> If when using the Java Broker, I try to consume from a Destination specified by a binding url, where the exchange part is empty (signifying the no-name exchange)
> {noformat}
> destination.sub1 = direct:////sub1?durable='true'
> {noformat}
> , then I see an exception:
> On the client I see the following as the Java Broker closes the connection:
> {noformat}
>  org.apache.qpid.AMQDisconnectedException: Server closed connection and reconnection not permitted.
> {noformat}
> On the broker, I see the following logged:
> {noformat}
> 2013-12-13 10:05:43,602 ERROR [IoReceiver - /127.0.0.1:49532] (v0_8.AMQProtocolEngine) - Unexpected exception while processing frame.  Closing connection.
> org.apache.qpid.AMQException: Exchange exchange must not be null
> 	at org.apache.qpid.server.protocol.v0_8.handler.ExchangeBoundHandler.methodReceived(ExchangeBoundHandler.java:89)
> 	at org.apache.qpid.server.protocol.v0_8.handler.ServerMethodDispatcherImpl.dispatchExchangeBound(ServerMethodDispatcherImpl.java:458)
> 	at org.apache.qpid.framing.amqp_0_9.ExchangeBoundBodyImpl.execute(ExchangeBoundBodyImpl.java:130)
> 	at org.apache.qpid.server.protocol.v0_8.state.AMQStateManager.methodReceived(AMQStateManager.java:120)
> 	at org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.methodFrameReceived(AMQProtocolEngine.java:578)
> 	at org.apache.qpid.framing.AMQMethodBodyImpl.handle(AMQMethodBodyImpl.java:97)
> 	at org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.frameReceived(AMQProtocolEngine.java:442)
> 	at org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.dataBlockReceived(AMQProtocolEngine.java:365)
> 	at org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.received(AMQProtocolEngine.java:286)
> 	at org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.received(AMQProtocolEngine.java:104)
> 	at org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:131)
> 	at org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:47)
> 	at org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:161)
> 	at java.lang.Thread.run(Thread.java:744)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org