-
Notifications
You must be signed in to change notification settings - Fork 38
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
Investigate other patterns for resilient consumers/connections #62
Comments
From NATS docs
Seems like Elixir lib should handle reconnect to meet expectations of other library languages. This is however a difficult problem with many edge cases. |
Resilient Connection Challengeshttps://docs.nats.io/using-nats/developer/connecting/reconnect
@mmmries Do know of any others or have comments on any of these? |
I had a conversation recently with @autodidaddict about the patterns in the current client, and we both agreed that our experiences of using the The 6 Allow reconnect booleanThis is essentially already support. If you use 9 Discovering all available serversI took a stab at this myself (in #54) and just couldn't figure out how to get the server to push cluster membership information back down to the client. I think doing this well would require some change to the 12 Buffer to hold published messages during a disconnectionI would love to add this. I think it should be a separate supervised process that acts as a publishing buffer and handles things like acknowledgements. You could startup the publisher a lot like the 13 Slow ConsumersThis is a very interesting idea to me, but I have no good ideas of how to approach it. I think it could be handled in the A unified / simplified clientYou can probably tell from the comments above that we've been designing the Elixir client as a sort of collection of tools rather than a single interface. The user has to know the different between calling I think it could be really valuable to have an approach similar to |
I definitely like the idea of having a nice clean, unified interface. I think this might be a good opportunity to look at how we can get JetStream, KV, and object store all into this client as a cohesive client library like the other NATS clients. We'd want to make sure that whatever we end up with is still something that can be easily declared in the children list of a supervisor/application, as well as manually Given the potentially expanding responsibilities of this core module, maybe we'd |
The current implementation of
ConnectionSupervisor
andConsumerSupervisor
are working, but I'm not sure they are idiomatic or ideal.I had a conversation on elixir forum where I got some feedback about other possible approaches to this problem.
The text was updated successfully, but these errors were encountered: