public class JmsMatsMessage<Z> extends java.lang.Object implements MatsOutgoingMessage.MatsEditableOutgoingMessage, MatsOutgoingMessage.MatsSentOutgoingMessage
MatsOutgoingMessage.DispatchType, MatsOutgoingMessage.MatsEditableOutgoingMessage, MatsOutgoingMessage.MatsSentOutgoingMessage, MatsOutgoingMessage.MessageType
Modifier and Type | Method and Description |
---|---|
void |
addBytes(java.lang.String key,
byte[] payload)
Add byte[] sideload to outgoing message.
|
void |
addString(java.lang.String key,
java.lang.String payload)
Add String sideload to outgoing message.
|
boolean |
equals(java.lang.Object obj) |
byte[] |
getBytes(java.lang.String key) |
java.util.Set<java.lang.String> |
getBytesKeys() |
java.lang.Object |
getData() |
int |
getDataSerializedSize() |
MatsOutgoingMessage.DispatchType |
getDispatchType() |
long |
getEnvelopeCompressionNanos() |
long |
getEnvelopeProduceNanos() |
long |
getEnvelopeSerializationNanos() |
int |
getEnvelopeSerializedSize() |
int |
getEnvelopeWireSize() |
java.lang.String |
getFlowId() |
java.lang.String |
getFrom()
Note: For messages out of an initiator, this method and
MatsOutgoingMessage.getInitiatorId() returns the same value, i.e. |
java.util.Optional<java.lang.Object> |
getInitialTargetState() |
java.lang.String |
getInitiatingAppName() |
java.lang.String |
getInitiatingAppVersion() |
java.lang.String |
getInitiatorId()
Note: For messages out of an initiator, this method and
MatsOutgoingMessage.getFrom() returns the same value, i.e. |
java.lang.String |
getMatsMessageId() |
MatsTrace<Z> |
getMatsTrace() |
long |
getMessageSystemProduceAndSendNanos() |
int |
getMessageSystemTotalWireSize() |
MatsOutgoingMessage.MessageType |
getMessageType() |
java.util.Optional<java.lang.String> |
getReplyTo() |
java.util.Optional<java.lang.Object> |
getSameStackHeightState() |
java.lang.String |
getString(java.lang.String key) |
java.util.Set<java.lang.String> |
getStringKeys() |
java.lang.String |
getSystemMessageId() |
long |
getTimeToLive() |
java.lang.String |
getTo() |
java.lang.String |
getTraceId() |
<T> T |
getTraceProperty(java.lang.String propertyName,
java.lang.Class<T> type) |
java.util.Set<java.lang.String> |
getTracePropertyKeys() |
java.lang.String |
getWhat() |
int |
hashCode() |
boolean |
isInteractive() |
boolean |
isNoAudit() |
boolean |
isNonPersistent() |
java.util.Optional<java.lang.Boolean> |
isReplyToSubscription() |
boolean |
isToSubscription() |
static <Z> JmsMatsMessage<Z> |
produceMessage(MatsOutgoingMessage.DispatchType dispatchType,
long nanosAtStart_ProducingOutgoingMessage,
MatsSerializer<Z> matsSerializer,
MatsTrace<Z> outgoingMatsTrace,
java.lang.Object outgoingMessage,
java.lang.Object initialTargetState,
java.lang.Object sameStackHeightState,
java.util.HashMap<java.lang.String,java.lang.Object> props,
java.util.HashMap<java.lang.String,byte[]> bytes,
java.util.HashMap<java.lang.String,java.lang.String> strings)
NOTE: The Maps are copied/cloned out, so invoker can do whatever he feels like with them afterwards.
|
void |
setSameStackHeightExtraState(java.lang.String key,
java.lang.Object object)
An interceptor might need to add state to an outgoing message which will be present on incoming message of
the next stage of a multi-stage endpoint - i.e.
|
void |
setTraceProperty(java.lang.String propertyName,
java.lang.Object object)
Set trace property.
|
public static <Z> JmsMatsMessage<Z> produceMessage(MatsOutgoingMessage.DispatchType dispatchType, long nanosAtStart_ProducingOutgoingMessage, MatsSerializer<Z> matsSerializer, MatsTrace<Z> outgoingMatsTrace, java.lang.Object outgoingMessage, java.lang.Object initialTargetState, java.lang.Object sameStackHeightState, java.util.HashMap<java.lang.String,java.lang.Object> props, java.util.HashMap<java.lang.String,byte[]> bytes, java.util.HashMap<java.lang.String,java.lang.String> strings)
public java.lang.String getWhat()
public java.lang.String getTraceId()
getTraceId
in interface MatsOutgoingMessage
public java.lang.String getFlowId()
getFlowId
in interface MatsOutgoingMessage
public boolean isNonPersistent()
isNonPersistent
in interface MatsOutgoingMessage
public long getTimeToLive()
getTimeToLive
in interface MatsOutgoingMessage
public boolean isInteractive()
isInteractive
in interface MatsOutgoingMessage
public boolean isNoAudit()
isNoAudit
in interface MatsOutgoingMessage
public java.lang.String getInitiatingAppName()
getInitiatingAppName
in interface MatsOutgoingMessage
public java.lang.String getInitiatingAppVersion()
getInitiatingAppVersion
in interface MatsOutgoingMessage
public java.lang.String getInitiatorId()
MatsOutgoingMessage
MatsOutgoingMessage.getFrom()
returns the same value, i.e. it is
"initiated from", and "from", the same source.getInitiatorId
in interface MatsOutgoingMessage
MatsInitiator.MatsInitiate.from(String)
at the time of the Mats
flow initiation.public java.lang.String getMatsMessageId()
getMatsMessageId
in interface MatsOutgoingMessage
public MatsOutgoingMessage.MessageType getMessageType()
getMessageType
in interface MatsOutgoingMessage
public MatsOutgoingMessage.DispatchType getDispatchType()
getDispatchType
in interface MatsOutgoingMessage
public java.util.Set<java.lang.String> getTracePropertyKeys()
getTracePropertyKeys
in interface MatsOutgoingMessage
public <T> T getTraceProperty(java.lang.String propertyName, java.lang.Class<T> type)
getTraceProperty
in interface MatsOutgoingMessage
public java.util.Set<java.lang.String> getBytesKeys()
getBytesKeys
in interface MatsOutgoingMessage
public byte[] getBytes(java.lang.String key)
getBytes
in interface MatsOutgoingMessage
public java.util.Set<java.lang.String> getStringKeys()
getStringKeys
in interface MatsOutgoingMessage
public java.lang.String getString(java.lang.String key)
getString
in interface MatsOutgoingMessage
public java.lang.String getFrom()
MatsOutgoingMessage
MatsOutgoingMessage.getInitiatorId()
returns the same value, i.e. it
is "initiated from", and "from", the same source.getFrom
in interface MatsOutgoingMessage
MatsOutgoingMessage.getInitiatorId()
.public java.lang.String getTo()
getTo
in interface MatsOutgoingMessage
public boolean isToSubscription()
isToSubscription
in interface MatsOutgoingMessage
public java.util.Optional<java.lang.String> getReplyTo()
getReplyTo
in interface MatsOutgoingMessage
public java.util.Optional<java.lang.Boolean> isReplyToSubscription()
isReplyToSubscription
in interface MatsOutgoingMessage
public java.util.Optional<java.lang.Object> getSameStackHeightState()
getSameStackHeightState
in interface MatsOutgoingMessage
MatsOutgoingMessage.getInitialTargetState()
.public java.lang.Object getData()
getData
in interface MatsOutgoingMessage
public java.util.Optional<java.lang.Object> getInitialTargetState()
getInitialTargetState
in interface MatsOutgoingMessage
public void setTraceProperty(java.lang.String propertyName, java.lang.Object object)
MatsOutgoingMessage.MatsEditableOutgoingMessage
setTraceProperty
in interface MatsOutgoingMessage.MatsEditableOutgoingMessage
public void setSameStackHeightExtraState(java.lang.String key, java.lang.Object object)
MatsOutgoingMessage.MatsEditableOutgoingMessage
MatsOutgoingMessage.MessageType.REQUEST
, MatsOutgoingMessage.MessageType.NEXT
and MatsOutgoingMessage.MessageType.GOTO
- will
throw IllegalStateException
otherwise.
REQUEST: If extra-state is added to an outgoing REQUEST-message from ServiceA.stage1, it will be present
again on the subsequent REPLY-message to ServiceA.stage2 (and any subsequent stages).
NEXT: If extra-state is added to an outgoing NEXT-message from ServiceA.stage1, it will be present again on
the subsequent incoming message to ServiceA.stage2 (and any subsequent stages).
To add info to the receiving stage of a REQUEST, you may employ MatsOutgoingMessage.MatsEditableOutgoingMessage.addBytes(String, byte[])
and
MatsOutgoingMessage.MatsEditableOutgoingMessage.addString(String, String)
. Given that such extra-state would need support from the receiving
endpoint too to make much sense (i.e. an installed interceptor reading and understanding the incoming extra
state, typically the same interceptor installed there as the one adding the state), it could just pick up the
side load and transfer it over to the extra state if that was desired. Therefore, even though it could be
possible to add extra-state to the targeted/receiving endpoint, I've decided against it so far.
The extra-state is available on the stage interception at
MatsStageInterceptor.StageCommonContext.getIncomingSameStackHeightExtraState(String, Class)
.setSameStackHeightExtraState
in interface MatsOutgoingMessage.MatsEditableOutgoingMessage
public void addBytes(java.lang.String key, byte[] payload)
MatsOutgoingMessage.MatsEditableOutgoingMessage
addBytes
in interface MatsOutgoingMessage.MatsEditableOutgoingMessage
public void addString(java.lang.String key, java.lang.String payload)
MatsOutgoingMessage.MatsEditableOutgoingMessage
addString
in interface MatsOutgoingMessage.MatsEditableOutgoingMessage
public java.lang.String getSystemMessageId()
getSystemMessageId
in interface MatsOutgoingMessage.MatsSentOutgoingMessage
public long getEnvelopeProduceNanos()
getEnvelopeProduceNanos
in interface MatsOutgoingMessage.MatsSentOutgoingMessage
getUserLambdaNanos()
for both init and
stage), as it is done at the time of e.g. invoking processContext.request()
inside the user lambda.public long getEnvelopeSerializationNanos()
getEnvelopeSerializationNanos
in interface MatsOutgoingMessage.MatsSentOutgoingMessage
public int getEnvelopeSerializedSize()
getEnvelopeSerializedSize
in interface MatsOutgoingMessage.MatsSentOutgoingMessage
MatsOutgoingMessage.MatsSentOutgoingMessage.getEnvelopeWireSize()
too, as the same applies here: This size only refers to the Mats
envelope, not the messaging system's final message size.public long getEnvelopeCompressionNanos()
getEnvelopeCompressionNanos
in interface MatsOutgoingMessage.MatsSentOutgoingMessage
0
if no compression was
applied, while it will return > 0 if compression was applied.public int getEnvelopeWireSize()
getEnvelopeWireSize
in interface MatsOutgoingMessage.MatsSentOutgoingMessage
MatsOutgoingMessage.MatsSentOutgoingMessage.getEnvelopeSerializedSize()
. Note that the returned size is only the (compressed) Mats
envelope, and does not include the size of the messaging system's message/envelope and any meta-data
that Mats adds to this. This means that the message size on the wire will be larger.public long getMessageSystemProduceAndSendNanos()
getMessageSystemProduceAndSendNanos
in interface MatsOutgoingMessage.MatsSentOutgoingMessage
public int getDataSerializedSize()
getDataSerializedSize
in interface MatsOutgoingMessage.MatsSentOutgoingMessage
public int getMessageSystemTotalWireSize()
getMessageSystemTotalWireSize
in interface MatsOutgoingMessage.MatsSentOutgoingMessage
public int hashCode()
hashCode
in class java.lang.Object
public boolean equals(java.lang.Object obj)
equals
in class java.lang.Object