Ditto 1.5.0 is API and binary compatible to prior Eclipse Ditto 1.x versions.
Compared to the latest release 1.4.0, the following changes, new features and bugfixes were added.
In previous versions, Ditto negatively settled messages consumed via AMQP 1.0 which could not be applied to Ditto
(e.g. because the received message could not be understood or permissions were missing) with
This was changed to settle with
(see AMQP 1.0 spec)
instead, as this is the more correct settlement outcome.
Prior to Ditto 1.5.0, the unit tests still were done against MongoDB version 3.6 which reaches end-of-life in April 2021.
-docker.conf config files are needed any longer, there are only special config files
-dev.conf which contain configuration in order to start Eclipse Ditto e.g. locally in an IDE.
Feature IDs may now be used as placeholders in Connectivity header mappings.
A feature which was long on the roadmap of Eclipse Ditto is the ability to distinguish between reported and desired twin state.
“reported” twin state can be seen as data/state coming from the actual device (the current “truth”) whereas the “desired” state is something an application in the backend or a mobile app would set as the new requested target state for a property.
This issue layed the foundation by creating the model and the APIs in order to manage those
When using acknowledgements in order to guarantee “at least once” (QoS 1) delivery and scenarios like:
- a subscriber that declared an ack label requested by the publisher is not authorized to receive a published signal
- or: a subscriber that declared an ack label requested by the publisher discards the published signal due to namespace or RQL filtering
resending the signal will not help. Ditto now emits a “weak acknowledgement” for such cases that does not trigger redelivery.
A “group” concept was added to Ditto pub/sub:
- Subscribers may subscribe with a group name.
- Published signals are delivered to exactly 1 subscriber within each group chosen consistently according to the entity ID.
With this feature, the event publishing at connections will scale with the number of client actors by having the client actors subscribe for events directly using the connection ID as group.
While cloud events provide bindings for Kafka, MQTT, … they also have an HTTP endpoint binding, which can easily be used in the combination with Knative.
With addition of a new HTTP endpoint
/cloudevents, it is now possible to easily map incoming messages from any
Knative eventing source to Eclipse Ditto, acting as a Knative eventing sink.
/messages endpoints did not allow that a Ditto Protocol messages with non-existing
"value" were created for
HTTP invocations which did not include payload at all.
That was fixed in the way that for requests with
Content-Length: 0 the
"value" is now removed from the resulting
Ditto Protocol message instead of being
"value": "" (empty JSON string).
Ditto Java client: When starting consumption with invalid filter, wrongly timeout exception is propagate to the user
throwed a wrong exception and did not propagate the real error to the user.
Affected Ditto PR.
This fixes a bug that caused ignoring features in a FeatureChange for change-registrations on single features, when only a single subpath exists in the feature (i.e. feature with only properties).
MongoDB hostname configuration
Due to the consolidation of config files, it is now required to configure
hostname explicitly as the default hostname was changed to
Previously, this hostname was automatically set to
mongodb (which is the hostname of the MongoDB when e.g. the
docker-compose.yaml deployment is used) in Docker based environments.
This now has to be manually done via the environment variable
docker-compose.yaml was also adjusted accordingly: