@Override public Map<String, MetaDataValue> apply(MetaData metaData) { Map<String, MetaDataValue> metaDataValueMap = new HashMap<>(); metaData.forEach((key, value)-> metaDataValueMap.put(key, metaDataConverter.convertToMetaDataValue(value))); return metaDataValueMap; } }
@Override public <T> Message<T> convertToOutboundMessage(EventMessage<T> event) { Map<String, Object> headers = new HashMap<>(); event.getMetaData().forEach(headers::put); headers.put(MESSAGE_ID, event.getIdentifier()); if (event instanceof DomainEventMessage) { headers.put(AGGREGATE_ID, ((DomainEventMessage) event).getAggregateIdentifier()); headers.put(AGGREGATE_SEQ, ((DomainEventMessage) event).getSequenceNumber()); headers.put(AGGREGATE_TYPE, ((DomainEventMessage) event).getType()); } return new GenericMessage<>(event.getPayload(), new SettableTimestampMessageHeaders(headers, event.getTimestamp().toEpochMilli())); }
public Event map(EventMessage<?> eventMessage, Serializer serializer) { Event.Builder builder = Event.newBuilder(); if (eventMessage instanceof GenericDomainEventMessage) { builder.setAggregateIdentifier(((GenericDomainEventMessage) eventMessage).getAggregateIdentifier()) .setAggregateSequenceNumber(((GenericDomainEventMessage) eventMessage).getSequenceNumber()) .setAggregateType(((GenericDomainEventMessage) eventMessage).getType()); } SerializedObject<byte[]> serializedPayload = eventMessage.serializePayload(serializer, byte[].class); builder.setMessageIdentifier(eventMessage.getIdentifier()).setPayload( io.axoniq.axonserver.grpc.SerializedObject.newBuilder() .setType(serializedPayload.getType().getName()) .setRevision(getOrDefault( serializedPayload.getType().getRevision(), "" )) .setData(ByteString.copyFrom(serializedPayload.getData())) ).setTimestamp(eventMessage.getTimestamp().toEpochMilli()); eventMessage.getMetaData().forEach((k, v) -> builder.putMetaData(k, converter.convertToMetaDataValue(v))); return builder.build(); }
@Override public Map<String, MetaDataValue> apply(MetaData metaData) { Map<String, MetaDataValue> metaDataValueMap = new HashMap<>(); metaData.forEach((key, value)-> metaDataValueMap.put(key, metaDataConverter.convertToMetaDataValue(value))); return metaDataValueMap; } }
private static void addAxonHeaders(Headers target, EventMessage<?> eventMessage, SerializedObject<byte[]> serializedObject, BiFunction<String, Object, RecordHeader> headerValueMapper) { eventMessage.getMetaData() .forEach((k, v) -> target.add(headerValueMapper.apply(generateMetadataKey(k), v))); defaultHeaders(eventMessage, serializedObject).forEach((k, v) -> addHeader(target, k, v)); }
private static void addAxonHeaders(Headers target, EventMessage<?> eventMessage, SerializedObject<byte[]> serializedObject, BiFunction<String, Object, RecordHeader> headerValueMapper) { eventMessage.getMetaData() .forEach((k, v) -> target.add(headerValueMapper.apply(generateMetadataKey(k), v))); defaultHeaders(eventMessage, serializedObject).forEach((k, v) -> addHeader(target, k, v)); }
public static ProducerRecord<String, byte[]> toRecord(final EventMessage<?> message, final Serializer serializer, final String eventStorage) { final SerializedObject<byte[]> serializedObject = serializePayload(message, serializer, byte[].class); final Map<String, Object> headers = new HashMap<>(); message.getMetaData().forEach((k, v) -> headers.put("axon-metadata-" + k, v)); headers.put("axon-message-id", message.getIdentifier()); headers.put("axon-message-type", serializedObject.getType().getName()); headers.put("axon-message-revision", serializedObject.getType().getRevision()); headers.put("axon-message-timestamp", message.getTimestamp().toString()); if (message instanceof DomainEventMessage<?>) { headers.put("axon-message-aggregate-id", ((DomainEventMessage<?>) message).getAggregateIdentifier()); headers.put("axon-message-aggregate-seq", ((DomainEventMessage<?>) message).getSequenceNumber()); headers.put("axon-message-aggregate-type", ((DomainEventMessage<?>) message).getType()); } final KafkaPayload payload = new KafkaPayload(headers, serializedObject.getData()); final SerializedObject<byte[]> serializedKafkaPayload = serializer.serialize(payload, byte[].class); return new ProducerRecord<>(eventStorage, serializedKafkaPayload.getData()); }
@SuppressWarnings("rawtypes") public static KafkaMessage createKafkaMessage(final Serializer serializer, final EventMessage<?> eventMessage) { final SerializedObject<byte[]> serializedObject = serializePayload(eventMessage, serializer, byte[].class); final Map<String, Object> headers = new HashMap<>(); eventMessage.getMetaData().forEach((k, v) -> headers.put("axon-metadata-" + k, v)); headers.put("axon-message-id", eventMessage.getIdentifier()); headers.put("axon-message-type", serializedObject.getType().getName()); headers.put("axon-message-revision", serializedObject.getType().getRevision()); headers.put("axon-message-timestamp", eventMessage.getTimestamp().toString()); if (eventMessage instanceof DomainEventMessage) { headers.put("axon-message-aggregate-id", ((DomainEventMessage) eventMessage).getAggregateIdentifier()); headers.put("axon-message-aggregate-seq", ((DomainEventMessage) eventMessage).getSequenceNumber()); headers.put("axon-message-aggregate-type", ((DomainEventMessage) eventMessage).getType()); } final KafkaPayload payload = new KafkaPayload(headers, serializedObject.getData()); final SerializedObject<byte[]> serializedKafkaPayload = serializer.serialize(payload, byte[].class); return new KafkaMessage(eventMessage.getTimestamp().toString(), serializedKafkaPayload.getData()); }
@Override public AMQPMessage createAMQPMessage(EventMessage<?> eventMessage) { SerializedObject<byte[]> serializedObject = eventMessage.serializePayload(serializer, byte[].class); String routingKey = routingKeyResolver.resolveRoutingKey(eventMessage); AMQP.BasicProperties.Builder properties = new AMQP.BasicProperties.Builder(); Map<String, Object> headers = new HashMap<>(); eventMessage.getMetaData().forEach((k, v) -> headers.put(Headers.MESSAGE_METADATA + "-" + k, v)); Headers.defaultHeaders(eventMessage, serializedObject).forEach((k, v) -> { if (k.equals(MESSAGE_TIMESTAMP)) { headers.put(k, formatInstant(eventMessage.getTimestamp())); } else { headers.put(k, v); } }); properties.headers(headers); if (durable) { properties.deliveryMode(2); } return new AMQPMessage(serializedObject.getData(), routingKey, properties.build(), false, false); }
@Override public AMQPMessage createAMQPMessage(EventMessage<?> eventMessage) { SerializedObject<byte[]> serializedObject = serializePayload(eventMessage, serializer, byte[].class); String routingKey = routingKeyResolver.resolveRoutingKey(eventMessage); AMQP.BasicProperties.Builder properties = new AMQP.BasicProperties.Builder(); Map<String, Object> headers = new HashMap<>(); eventMessage.getMetaData().forEach((k, v) -> headers.put(Headers.MESSAGE_METADATA + "-" + k, v)); Headers.defaultHeaders(eventMessage, serializedObject).forEach((k, v) -> { if (k.equals(MESSAGE_TIMESTAMP)) { headers.put(k, formatInstant(eventMessage.getTimestamp())); } else { headers.put(k, v); } }); properties.headers(headers); if (durable) { properties.deliveryMode(2); } return new AMQPMessage(serializedObject.getData(), routingKey, properties.build(), false, false); }
public Event map(EventMessage<?> eventMessage, Serializer serializer) { Event.Builder builder = Event.newBuilder(); if (eventMessage instanceof GenericDomainEventMessage) { builder.setAggregateIdentifier(((GenericDomainEventMessage) eventMessage).getAggregateIdentifier()) .setAggregateSequenceNumber(((GenericDomainEventMessage) eventMessage).getSequenceNumber()) .setAggregateType(((GenericDomainEventMessage) eventMessage).getType()); } SerializedObject<byte[]> serializedPayload = eventMessage.serializePayload(serializer, byte[].class); builder.setMessageIdentifier(eventMessage.getIdentifier()).setPayload( io.axoniq.axonserver.grpc.SerializedObject.newBuilder() .setType(serializedPayload.getType().getName()) .setRevision(getOrDefault( serializedPayload.getType().getRevision(), "" )) .setData(ByteString.copyFrom(serializedPayload.getData())) ).setTimestamp(eventMessage.getTimestamp().toEpochMilli()); eventMessage.getMetaData().forEach((k, v) -> builder.putMetaData(k, converter.convertToMetaDataValue(v))); return builder.build(); }