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

Feature/mqtt connectivity #225

Merged
merged 66 commits into from
Sep 5, 2018

Conversation

yufei-cai
Copy link
Contributor

Add some MQTT support #220 using Alpakka.

Changes:

  • Replaced custom regex for connection URI by standard java.net.URI to support URI schemes used by Alpakka to determine the transport protocol.
  • Added connection type mqtt and the client actor, publisher, subscriber and connection factory for it.
  • Split Source and Target of connections into protocol-specific implimentations for configurations.
  • Added Quality of Service configuration for Source and Target of MQTT connections.
  • Added topic filters to Source of MQTT connections to check consistency between MQTT topics and Ditto protocol topics. The check is implemented by ThingIdEnforcement.
  • ConnectionActor now reads configuration from a ConnectionConfigReader instead of directly from the actor system config so that it needn't know all the protocol-specific config keys.

Authentication is unchanged. For Amazon IoT integration #220 we still need certificate-based authentication.

Binary interface breakage since release 0.8.0-M1:

  • Removed Connection.UriRegex in favor of java.net.URI
  • Removed methods newSource, sourceFromJson, targetFromJson from ConnectivityModelFactory
  • Added method getThingIdEnforcement to interface ExternalMessage
  • Added method withThingIdEnforcement to interface ExternalMessageBuilder
  • Added method withAddress to interface Target

dguggemos and others added 30 commits August 6, 2018 11:20
Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
…egex

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
…connection

Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
… time

Protocol-specific URI validations should be performed elsewhere.

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
… MqttClientActor

Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Reason: It confused Maven.

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
- add trust manager that accepts any certificate for testing purposes
- send OpenConnection instead CreateConnection on recovery

Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
… port in testTestConnectionFails

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
…nsumers by QoS of sources

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
…ntActor

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
…til publisher stream is ready

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
…er consumer

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
yufei-cai and others added 27 commits August 17, 2018 18:03
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
- fixed 'testHashCodeAndEquals'
- ignored 'assertImmutability' until it is fixed

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
…ect usage

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
… ConnectionActor

ConnectionActor
- Cancel STOP_SELF_IF_DELETED post-stop

BaseClientActor
- Accept only Status.Status as test connection result if it
  is sent from self

Mqtt
- Add dryRun mode to publisher and subscriber actors
- Instead of starting a new Paho client, start publishers and
  subscribers in dryRun mode to test the connection. Thus is
  test result consistent with normal operation.

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
… ConnectionActor

Instead of collecting pending responses and flush them in one go,
schedule the responses with fixed delay.

Reason: Sending CreateConnectionResponse on arrival of first
event is not correct because pub/sub may not be distributed
on all cluster nodes. Thus all responses are sent after fixed
delay, obviating their retention outside the scheduler.

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
…ers regardless of state

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Also verified that Alpakka sources work with QoS 2.

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
- Source buffer size is configured via ConnectionConfigReader.mqtt().

- Source is wrapped in RestartSource when failover is enabled.

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
…ufficient

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: marianne-klein <marianne.klein@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
…rget addresses

- Immutable{Address|Source|Target}Metrics: tolerate empty Json key during serialization
- BaseClientActor: do not read message counters in future.
- ConnectionValidator: reject connections with empty source or target addresses

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
testRetrieveConnectionMetrics did not send OpenConnection.
Don't know why it wasn't failing.

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
… filters; add javadoc

Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
Signed-off-by: Cai Yufei (INST/ECS1) <yufei.cai@bosch-si.com>
@yufei-cai yufei-cai merged commit 9d9e763 into eclipse-ditto:master Sep 5, 2018
@yufei-cai yufei-cai deleted the feature/mqtt-connectivity branch September 5, 2018 10:20
@thjaeckle thjaeckle added this to the 0.8.0-M2 milestone Sep 5, 2018
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.

None yet

4 participants