Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MQTT-support #766

Open
wants to merge 200 commits into
base: main
Choose a base branch
from
Open

MQTT-support #766

wants to merge 200 commits into from

Conversation

kickster97
Copy link
Member

@kickster97 kickster97 commented Aug 26, 2024

WHAT is this pull request doing?

An MQTT-session inherits AMQP::Queue and extends with MQTT functionality.
MQTT exchange(topic) will only accept activity from an MQTT client, that will be responsible for routing messages to the MQTT-session.
The mqtt exchange handles MQTT routing keys etc. without needing to do conversions.

NOTE
The first version of MQTT Support does not support binding an AMQP exchange to and MQTT exchange. (Undefined behaviour if done)
In a separate PR we need to extract the AMQP exchange types into the AMQP namespace and in turn be able to differentiate between an AMQP::Destination and an MQTT::Destiantion when calling bind.
With that in place we will be able to safely do exchange to exchange bindings.

Docs for the website

HOW can this pull request be tested?

Specs have been migrated from Myra and fully cover the MQTT protocol, run with crystal spec.
Connect with mqtt client library of your choice and test your usage against this branch

static/js/connections.js Outdated Show resolved Hide resolved
static/js/connections.js Outdated Show resolved Hide resolved
src/lavinmq/vhost.cr Outdated Show resolved Hide resolved
src/lavinmq/vhost.cr Outdated Show resolved Hide resolved
src/lavinmq/mqtt/client.cr Outdated Show resolved Hide resolved
src/lavinmq/mqtt/client.cr Outdated Show resolved Hide resolved
src/lavinmq/mqtt/broker.cr Outdated Show resolved Hide resolved
@spuun
Copy link
Member

spuun commented Sep 24, 2024

I think you can (and maybe even should) build clean session by reusing the auto delete feature of queues.

@spuun
Copy link
Member

spuun commented Oct 12, 2024

About #803 (comment)

That connect spec passes, but for the wrong reason. Or well, the socket is closed but not because it receives the wrong packet type, but because of the bug that #803 will fix. When that bug is fixed i still think that the spec will pass, but for the right reason.

I guess the spec could be changed to send a PUBLISH instead (the packet must be greater than 8 byte to not trigger the bug).

@spuun
Copy link
Member

spuun commented Oct 12, 2024

After giving it a second thought I've concluded that we should change the spec to use some other packet type.

@kickster97
Copy link
Member Author

After giving it a second thought I've concluded that we should change the spec to use some other packet type.

ok I will change the spec then! thanks :)

@carlhoerberg
Copy link
Member

Often it's more efficient to yield than to capture and then call a block.

src/lavinmq/mqtt/broker.cr Outdated Show resolved Hide resolved
src/lavinmq/exchange/mqtt.cr Outdated Show resolved Hide resolved
src/lavinmq/mqtt/client.cr Outdated Show resolved Hide resolved
src/lavinmq/mqtt/client.cr Outdated Show resolved Hide resolved
src/lavinmq/mqtt/client.cr Outdated Show resolved Hide resolved
src/lavinmq/mqtt/client.cr Outdated Show resolved Hide resolved
src/lavinmq/vhost.cr Outdated Show resolved Hide resolved
kickster97 and others added 29 commits December 20, 2024 14:08
If a msg file is a few bytes larger than expected, first? will throw an IndexError and close the queue. This changes that behavior to instead rescue that IndexError and try to move on to the next segment file. Same fix as for shift? in #671

fixes #669 (again 🙂)
Don't redeclare exchange in test/java/com/rabbitmq/client/test/functional/Tables.java.
log a status message in followers every 30 seconds with total amount of streamed bytes
This is a temporary "hack" that can be removed when MQTT Exchanges and
Queues no longer inherit from AMQP entitites.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants