Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set connection friendly name in Go amqp client

Tags:

go

amqp

I am using the http://github.com/streadway/amqp package in my application in order to handle connections to a remote RabbitMQ server. Everything is ok and works fine, but I have a question.

The current name for a connection is "ip:port", so when there are multiple connections from the same IP+port, they become hardly distinguishable. It would be great if you can specify a name for each connection.

Is there any way to set a distinct friendly name for each connection?

like image 711
elham anari Avatar asked Jan 19 '26 03:01

elham anari


1 Answers

RabbitMQ 3.6.5 added the facility for the connecting client to report a friendly name string value to identify a connection for management purposes. This is strictly an identifier and, as it is client-reported, it cannot be relied upon for anything other than weak identification of connections. The release notes state:

Clients now can provide a human-readable connection name that will be displayed in the management UI... In order to use this feature, set the connection_name key in client properties. Note that this name doesn’t have to be unique and cannot be used as a connection identifier, for example, in HTTP API requests.


Solution

Provided you are using a sufficiently new version of RabbitMQ, you can set this parameter when making connections using streadway/amqp by passing an instance of amqp.Config when making the initial connection. The Properties field allows custom properties of the connection to be specified.

The example program below opens a connection using the AMQP URL provided in the environment variable AMQP_URL, identified using the connection name passed as the first command line argument to the invocation.

package main

import (
    "log"
    "os"

    "github.com/streadway/amqp"
)

func main() {
    amqpUrl := os.Getenv("AMQP_URL")

    cfg := amqp.Config{
        Properties: amqp.Table{
            "connection_name": os.Args[1],
        },
    }

    conn, err := amqp.DialConfig(amqpUrl, cfg)
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    <-(chan struct{})(nil)
}

Starting multiple instances to connect to a local RabbitMQ instance using the following command line:

AMQP_URL=amqp://admin:password@localhost:5672 go run ./main.go connX

where a numeral is substituted for X yields the following output in the "Connections" page of the RabbitMQ Management web UI:

RabbitMQ connections showing friendly names conn1, conn2 and conn3.

and the individual connection detail pages shows the value under the "Client-provided name" detail value:

Client-provided name shows the connection name on the connection detail page in the management UI.

like image 94
Cosmic Ossifrage Avatar answered Jan 20 '26 19:01

Cosmic Ossifrage



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!