@Override public ShardedMessageEnvelope setDittoHeaders(final DittoHeaders dittoHeaders) { return of(id, type, message, dittoHeaders); }
@Override public ShardedMessageEnvelope setDittoHeaders(final DittoHeaders dittoHeaders) { return of(id, type, message, dittoHeaders); }
private <M> void forwardToShardRegion(final M message, final Function<M, String> getId, final Function<M, String> getType, final Function<M, JsonObject> toJson, final Function<M, DittoHeaders> getDittoHeaders) { final String id = getId.apply(message); log.debug("Forwarding incoming {} to shard region of {}", message.getClass().getSimpleName(), id); final String type = getType.apply(message); final JsonObject jsonObject = toJson.apply(message); final DittoHeaders dittoHeaders = getDittoHeaders.apply(message); final ShardedMessageEnvelope messageEnvelope = ShardedMessageEnvelope.of(id, type, jsonObject, dittoHeaders); shardRegion.forward(messageEnvelope, context()); }
private <M> void forwardToShardRegion(final M message, final Function<M, String> getId, final Function<M, String> getType, final Function<M, JsonObject> toJson, final Function<M, DittoHeaders> getDittoHeaders) { final String id = getId.apply(message); log.debug("Forwarding incoming {} to shard region of {}", message.getClass().getSimpleName(), id); final String type = getType.apply(message); final JsonObject jsonObject = toJson.apply(message); final DittoHeaders dittoHeaders = getDittoHeaders.apply(message); final ShardedMessageEnvelope messageEnvelope = ShardedMessageEnvelope.of(id, type, jsonObject, dittoHeaders); final ActorRef sender = getSender(); final ActorRef deadLetters = getContext().getSystem().deadLetters(); namespaceBlockingBehavior .block(messageEnvelope) .thenAccept(m -> shardRegion.tell(m, sender)) .exceptionally(throwable -> { if (!Objects.equals(sender, deadLetters)) { // Only acknowledge IdentifiableStreamingMessage. No other messages should be acknowledged. if (message instanceof IdentifiableStreamingMessage) { final StreamAck streamAck = StreamAck.success(((IdentifiableStreamingMessage) message).asIdentifierString()); sender.tell(streamAck, getSelf()); } } return null; }); }
private static ShardedMessageEnvelope createEnvelope(final EntityId entityId, final Signal<?> signal) { return ShardedMessageEnvelope.of( entityId.toString(), signal.getType(), signal.toJson(signal.getImplementedSchemaVersion(), FieldType.regularOrSpecial()), signal.getDittoHeaders()); } }
/** * Returns a new {@code ShardedMessageEnvelope} parsed from the specified {@code jsonObject}. * * @param jsonObject the JSON object. * @return the ShardedMessageEnvelope. */ public static ShardedMessageEnvelope fromJson(final JsonObject jsonObject) { final String extractedId = jsonObject.getValueOrThrow(JSON_ID); final String extractedType = jsonObject.getValueOrThrow(JSON_TYPE); final JsonObject extractedMessage = jsonObject.getValueOrThrow(JSON_MESSAGE); final JsonObject jsonDittoHeaders = jsonObject.getValueOrThrow(JSON_DITTO_HEADERS); final DittoHeaders extractedDittoHeaders = DittoHeaders.newBuilder(jsonDittoHeaders).build(); return of(extractedId, extractedType, extractedMessage, extractedDittoHeaders); }
/** * Returns a new {@code ShardedMessageEnvelope} parsed from the specified {@code jsonObject}. * * @param jsonObject the JSON object. * @return the ShardedMessageEnvelope. */ public static ShardedMessageEnvelope fromJson(final JsonObject jsonObject) { final String extractedId = jsonObject.getValueOrThrow(JSON_ID); final String extractedType = jsonObject.getValueOrThrow(JSON_TYPE); final JsonObject extractedMessage = jsonObject.getValueOrThrow(JSON_MESSAGE); final JsonObject jsonDittoHeaders = jsonObject.getValueOrThrow(JSON_DITTO_HEADERS); final DittoHeaders extractedDittoHeaders = DittoHeaders.newBuilder(jsonDittoHeaders).build(); return of(extractedId, extractedType, extractedMessage, extractedDittoHeaders); }
private void retrieveThing() { final DittoHeaders dittoHeaders = DittoHeaders.newBuilder() .correlationId("thingUpdater-sudoRetrieveThing-" + UUID.randomUUID()) .build(); final SudoRetrieveThing sudoRetrieveThingCmd = SudoRetrieveThing.withOriginalSchemaVersion(thingId, dittoHeaders); final String cmdType = sudoRetrieveThingCmd.getType(); final JsonSchemaVersion implementedSchemaVersion = sudoRetrieveThingCmd.getImplementedSchemaVersion(); final Predicate<JsonField> regularOrSpecialFields = FieldType.regularOrSpecial(); final JsonObject cmdJsonObject = sudoRetrieveThingCmd.toJson(implementedSchemaVersion, regularOrSpecialFields); final Object messageEnvelope = ShardedMessageEnvelope.of(thingId, cmdType, cmdJsonObject, dittoHeaders); // Send a message directly to the Things Shard Region. thingsShardRegion.tell(messageEnvelope, getSelf()); }
private void retrieveThing() { final DittoHeaders dittoHeaders = DittoHeaders.newBuilder() .correlationId("thingUpdater-sudoRetrieveThing-" + UUID.randomUUID()) .build(); final SudoRetrieveThing sudoRetrieveThingCmd = SudoRetrieveThing.withOriginalSchemaVersion(thingId, dittoHeaders); final String cmdType = sudoRetrieveThingCmd.getType(); final JsonSchemaVersion implementedSchemaVersion = sudoRetrieveThingCmd.getImplementedSchemaVersion(); final Predicate<JsonField> regularOrSpecialFields = FieldType.regularOrSpecial(); final JsonObject cmdJsonObject = sudoRetrieveThingCmd.toJson(implementedSchemaVersion, regularOrSpecialFields); final Object messageEnvelope = ShardedMessageEnvelope.of(thingId, cmdType, cmdJsonObject, dittoHeaders); // Send a message directly to the Things Shard Region. thingsShardRegion.tell(messageEnvelope, getSelf()); }