Hi, I’m using a Solace broker and consuming messages via AMQP 1.0 using Qpid JMS. I want to connect to a specific Message VPN and consume messages — should the Message VPN name be included in the AMQP URI or provided with the username? I’m a bit confused because some documentation suggests using amqp.vhost in the URI, while others mention appending it after the AMQP host and port.
example1- amqps://post:hort/namespace, example2- using a connection property like:{amqp.vhost=}, example3- with username like below: username@messageVpn.
Could you please clarify which approach is correct for Qpid JMS when connecting to a specific Message VPN in Solace?Also please guide on how to setup AMQP with message vpn.
Hi there, I’m Solly AI, I generate responses to your questions using the power of the Solace Agent Mesh:
Please remember that AI technology can make mistakes so ensure that you read our Disclaimer.
AI Generated responses are a work in progress, your help in evaluating my response would be awesome! If my response makes sense, please mark it as a solution or give a . If my response doesn’t make sense for your topic, please react to it with a .
Let me analyze the information about configuring AMQP 1.0 with Message VPNs using Qpid JMS.
The documentation shows that AMQP configuration for Message VPNs requires several key components:
Required configurations:
Guaranteed messaging and message spooling must be enabled
Client usernames must have profiles allowing guaranteed messaging
AMQP listen ports must be configured (global or per-VPN)
System-level AMQP service must be enabled
VPN-level AMQP service must be enabled
For Message VPN AMQP configuration:
Listen ports can be configured for plain-text and TLS/SSL transport
Maximum number of AMQP connections can be set per VPN
AMQP service can be enabled/disabled for plain-text and TLS/SSL separately
Here’s a summary of the key points:
AMQP service must be enabled at both system and VPN level
Listen ports need to be configured either globally or per-VPN
Both plain-text and TLS/SSL transport are supported on separate ports
Authentication settings affect how AMQP clients connect
The documentation provides information about configuring the broker side, but does not include specific guidance on Qpid JMS URI format or client setup steps.
For specific Qpid JMS client configuration and URI format details, I recommend consulting the Qpid JMS documentation as this information is not covered in the provided Solace documentation.
Hi @sinchana , since AMQP doesn’t have the notion of “Message VPNs”, you simply differentiate which VPN to connect to by using a different port. That is, each VPN needs to have a unique port for AMQP. (2 actually: TLS and non-TLS).
If using the Solace JMS API, that one uses our native SMF protocol, and that connects to 55555 or 55443 ports for SMF, for all VPNs, and so with Solace JMS API that’s where you use the @messageVpn convention for username.
Hi @Aron, so that means no two Message VPNs can share the same AMQP port (e.g., 5671). Therefore, while creating the connection, I can simply use the host, port, username, and password even if I want to connect to any specific VPN inside the cluster?
That’s right… each VPN gets its own AMQP port(s). You configure that in the VPN’s “service” settings. You’ll notice the same for MQTT. You need to choose a port for that VPN’s AMQP service that’s not being used by any other VPN on the broker, and then enable it. So there’s a 1-to-1 mapping of port-to-VPN. That’s how you choose which VPN you’re connecting to. default VPN usually has 5672 for non-TLS AMQP, and 5671 for TLS AMQP. I made a 2nd VPN on my broker, and gave it 5673 for non-TLS AMQP, and use that port to connect to that VPN.
If running inside a container (Docker?) and not using “host” networking mode (which allows the container full access to the host computers network), then you’ll need to make sure you expose/”publish” the new port you’ve configured. Unfortunately, this is done when the container is created, can’t do it dynamically (yet). For this reason, my Docker create scripts expose a small range of ports for each protocol: e.g. -p 5670-5678:5670-5678 \ for AMQP, so I can create new VPNs, assign them a new port number in the range, and I don’t have to recreate my container.
I have a doubt regarding exclusive and non-exclusive queues. I want to increase my consumer throughput , currently, I’m using an exclusive queue, but since it delivers messages to only one consumer, I’m unable to process them in parallel efficiently.
I’m planning to switch to a non-exclusive queue with 0 partitions and try consuming messages using multiple consumers simultaneously. I have a few questions about this:
Is there any way to differentiate whether a queue is exclusive or non-exclusive through metadata when consuming messages via AMQP? Are there any queue properties accessible through AMQP that can indicate this?
Just to confirm : non-exclusive queues with more than one partition are not supported in AMQP, right?
If I use multiple consumers for a non-exclusive queue (with 0 partitions), I assume the message order will not be guaranteed. Is that correct?