38 releases

new 0.1.2 May 24, 2024
0.0.36 Feb 16, 2024
0.0.35 Dec 15, 2023
0.0.34 Oct 20, 2023
0.0.6 Mar 31, 2023

#536 in Network programming

Download history 116/week @ 2024-02-15 32/week @ 2024-02-22 19/week @ 2024-02-29 16/week @ 2024-03-07 11/week @ 2024-03-14 3/week @ 2024-03-21 26/week @ 2024-03-28 50/week @ 2024-04-04 1/week @ 2024-04-11 4/week @ 2024-04-18 3/week @ 2024-04-25 2/week @ 2024-05-02 2/week @ 2024-05-09 330/week @ 2024-05-16

338 downloads per month
Used in 4 crates

MIT license

74KB
1.5K SLoC

crates.io Documentation CI Coverage License

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–36MB
~692K SLoC