The way to create a temp queue is to attach a receiving link with a
source that sets 'dynamic' to true and with no address, instructing a
server to create a dynamic/temporary node. The 'reply' attach source
then contains its address (assuming success and that there is then a
source).

Robbie

On Mon, 13 Jan 2020 at 10:32, Dirkjan Ochtman <[email protected]> wrote:
>
> Hi there,
>
> I'm still working on my reimplementation of an AMQP 1.0 client in Rust. I
> have implemented all the bits that are required to send a message to my
> target application, but I'm having trouble attaching to the second link
> that is supposed to be used to receive the responses to the messages. I'm
> using Artemis 2.6.2 here (I know this is a bit dated -- that's what comes
> with the vendor application).
>
> The application I'm targeting usually uses Core messages to do RPC, but it
> accepts AMQP messages as well, so it could be that there is a mismatch here
> between how things are set up.
>
> When using Core, I see that ServerSessionPacketHandler triggers on a packet
> with type -12 to create the queue with a well-defined name, which in the
> end dispatches to ServerSessionImpl.createQueue() with temporary = true and
> durable = false. This is the behavior I'm seeking to replicate. However,
> all my attempts to create to a temporary non-durable queue by attaching to
> it with AMQP seem to be failing so far.
>
> With my new AMQP client, I try to create the response queue by attaching to
> it with source address = <receive-queue-name>. This lets me end up in
> ProtonServerSenderContext.initialise() by way of
> AMQPSessionContext.addSender(). However, this throws a permission error
> (AMQ119213, my user does not have permission for CREATE_DURABLE_QUEUE).
> This is surprising to me because I leave the "durable" field as default,
> which should mean to default to no durability. It seems to happen because
> AMQPSessionCallback.queueQuery() calls (through some indirection)
> ServerSessionImpl.createQueue() with durable = true. I have to admit to
> being confused about the distinction between address and queue in
> initialise(), so I also tried with
> "<receive-queue-name>::<receive-queue-name>" as the source address to see
> if I could trigger a different code path in initialise(). This results in a
> QUEUE_DOES_NOT_EXIST error.
>
> This is my attach message:
>
> [0, 0, 0, 133, 2, 0, 0, 0, 0, 83, 18, 208, 0, 0, 0, 117, 0, 0, 0, 14, 161,
> 37, 114, 112, 99, 46, 99, 108, 105, 101, 110, 116, 46, 118, 120, 100, 105,
> 114, 46, 49, 50, 53, 52, 50, 57, 54, 53, 55, 53, 55, 48, 52, 57, 48, 48,
> 56, 51, 52, 48, 82, 1, 65, 64, 64, 0, 83, 40, 208, 0, 0, 0, 53, 0, 0, 0,
> 11, 161, 37, 114, 112, 99, 46, 99, 108, 105, 101, 110, 116, 46, 118, 120,
> 100, 105, 114, 46, 49, 50, 53, 52, 50, 57, 54, 53, 55, 53, 55, 48, 52, 57,
> 48, 48, 56, 51, 52, 48, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
> 64, 64, 64, 64, 64]
>
> Thanks in advance,
>
> Dirkjan

Reply via email to