AMQP Client

Terms & Concepts

Queue

Consume Message

Publish Message

TTL (Time to Live)

如果要讓訊息在超過所設置的時間,沒有被接收時即自動清除。這個設置稱為 TTL,在 RabbitMQ 裡 TTL 可以用在 Message 或 Queue 本身。

Message TTL

方法一: Policy

rabbitmqctl set_policy TTL ".*" '{"message-ttl":60000}' --apply-to queues

方法二: Queue 參數

Sample codes in C#

var args = new Dictionary<string, object>();
args.Add("x-message-ttl", 60000);
model.QueueDeclare("myqueue", false, false, false, args);

Queue TTL

方法一: Policy

rabbitmqctl set_policy expiry ".*" '{"expires":1800000}' --apply-to queues

方法二: Queue 參數

Sample codes in Java

Map<String, Object> args = new HashMap<String, Object>();
args.put("x-expires", 1800000);
channel.queueDeclare("myqueue", false, false, false, args);
rabbitmqadmin

Usage

# Publish a message
rabbitmqadmin -H <rabbitmq-server-ip> -u <user-name> -p <secret> -V <virtual-server> publish exchange=amq.default routing_key=my-testq payload="This is Alang"

# Consume/Get a message
rabbitmqadmin -H <rabbitmq-server-ip> -u <user-name> -p <secret> -V <virtual-host> get queue=my-testq ackmode=ack_requeue_false
amqp-tools

A CLI tool is built-in Ubuntu.

Install

sudo apt update
sudo apt install amqp-tools

Usage

# Declare a queue
amqp-declare-queue --url="amqp://<user-name>:<secret>@<rabbitmq-server-ip>:<rabbitmq-server-port>/<virtual-server>" -d -q "my-testq"

# Publish a message
amqp-publish --url="amqp://<user-name>:<secret>@<rabbitmq-server-ip>:<rabbitmq-server-port>/<virtual-server>" --routing-key="my-testq" -b "Hello,World"

# Get the messages (Poll mode)
amqp-get --url="amqp://<user-name>:<secret>@<rabbitmq-server-ip>:<rabbitmq-server-port>/<virtual-server>" --queue="my-testq"

# Get the messages (Push mode)
amqp-consume --url="amqp://<user-name>:<secret>@<rabbitmq-server-ip>:<rabbitmq-server-port>/<virtual-server>" --queue="my-testq" -p 2 ./show.sh

show.sh:

#!/usr/bin/env bash
read line
echo "Message: $line"
sleep 1

Revision #10
Created 14 September 2022 15:19:03 by Admin
Updated 18 October 2022 17:29:55 by Admin