51 releases
0.1.15 | Sep 27, 2024 |
---|---|
0.1.12 | Aug 31, 2024 |
0.1.6 | Jul 30, 2024 |
0.0.36 | Feb 16, 2024 |
0.0.6 | Mar 31, 2023 |
#513 in Network programming
Used in 4 crates
74KB
1.5K
SLoC
general-mq
General purposed interfaces for message queues. Now we provide the following implementations:
- AMQP 0-9-1
- MQTT
By using these classes, you can configure queues with the following properties:
- Unicast or broadcast.
- Reliable or best-effort.
Notes
- MQTT uses shared queues to implement unicast.
- AMQP uses confirm channels to implement reliable publish, and MQTT uses QoS 1 to implement reliable publish/subscribe.
Relationships of Connections and Queues
The term connection describes a TCP/TLS connection to the message broker. The term queue describes a message queue or a topic within a connection. You can use one connection to manage multiple queues, or one connection to manage one queue.
A queue can only be a receiver or a sender at a time.
Connections for sender/receiver queues with the same name
The sender and the receiver are usually different programs, there are two connections to hold two queues.
For the special case that a program acts both the sender and the receiver using the same queue:
- The AMQP implementation uses one Channel for one queue, so the program can manages all queues with one connection.
- The MQTT implementation MUST uses one connection for one queue, or both sender and receiver will receive packets.
Test
Please prepare a RabbitMQ broker and a EMQX broker at localhost for testing.
-
To install using Docker:
$ docker run --rm --name rabbitmq -d -p 5672:5672 rabbitmq:management-alpine $ docker run --rm --name emqx -d -p 1883:1883 emqx/emqx
Then run the test:
$ cargo test --test integration_test -- --nocapture
Example
Launch RabbitMQ and then run AMQP example:
$ cargo run --example simple
Launch EMQX and then run MQTT example:
$ RUN_MQTT= cargo run --example simple
Dependencies
~22–35MB
~649K SLoC