Let me start by thanking all contributors for feedback on Watermill - it drives us to add new features. Thanks!
It’s been almost a month since the initial release of Watermill. However, it’s just the beginning and we are still working hard to ship new features.
What is new in Watermill 0.2?
Documentation - watermill.io
Godoc is great. However, it’s functionality is sometimes too limited to express more complicated documentation.
For that reason, we’ve created watermill.io.
The most important parts of the documentation are:
- Getting Started guide which will explain you the most basic concepts of the Watermill by the examples.
- Pub/Sub’s implementations which contains detailed documentation of all built-in Pub/Sub’s implementations.
- Router documentation which explains how Messages Router is working.
- All documentation topics
Of course, we are not abandoning godoc. You can still find all important information in the comments (in fact, a large part of watermill.io is generated directly from godocs).`
context.Context to the message.
From now on, the
Message holds a
Context, which carries deadlines, cancelation signals, and other message-scoped values.
Unlike metadata, it is not serialized nor sent to the Pub/Sub.
Replaced Kafka Pub/Sub implementation with Sarama
Watermill development started when Sarama didn’t have support for consumer groups yet.
Fortunately, it is now available. Thanks to this fact we could replace
librdkafka implementation with Sarama.
Using Sarama allowed us to get entirely rid of the
cgo dependency in Watermill.
Another great bonus is a great improvement of messages publishing performance (quick benchmarks showed upgrade from 10k messages/s to 75k messages/s).
Because the client implementation has been replaced, this change is not backward compatible.
Kafka Breaking changes and API cleanups:
kafka.NewCustomPublisherhas been removed, please use
kafka.ConfluentConsumerConstructorhas been removed and is no longer needed.
kafka.SubscriberConfig.NoConsumerGroupis no longer needed. You can now just pass empty
kafka.AutoOffsetResethas been removed. Please use
kafka.ConsumersCounthas been removed and is no longer needed.
kafka.KafkaConfigOverwritehas been removed and is no longer needed. You can now pass
kafka.NewConfluentSubscriberhas been removed. Please use
kafka.NewCustomConfluentSubscriberhas been removed. Please use
kafka.DefaultConfluentConsumerConstructorhas been removed and is no longer needed.
kafka.Unmarshalerinterfaces have been changed to be compatible with the Sarama API.
Google Cloud Pub/Sub
Cloud Pub/Sub brings the flexibility and reliability of enterprise message-oriented middleware to the cloud. At the same time, Cloud Pub/Sub is scalable, durable event ingestion and delivery system that serves as a foundation for modern stream analytics pipelines. By providing many-to-many, asynchronous messaging that decouples senders and receivers, it allows for secure and highly available communication among independently written applications. Cloud Pub/Sub delivers low-latency, durable messaging that helps developers quickly integrate systems hosted on the Google Cloud Platform and externally.
Credits goes to @maclav3. Thanks for the contribution!
NATS Streaming Pub/Sub
NATS Streaming is a data streaming system powered by NATS, and written in the Go programming language. The executable name for the NATS Streaming server is nats-streaming-server. NATS Streaming embeds, extends, and interoperates seamlessly with the core NATS platform.
If there’s something missing in Watermill, feel free to post a new feature request or give thumbs up for the existing issue.
Also, the HTTP Publisher sounds like not too much of work and may provide some interesting functionalities.