in csharp/rocketmq-client-csharp/PublishingMessage.cs [36:77]
public PublishingMessage(Message message, PublishingSettings publishingSettings, bool txEnabled) : base(
message)
{
var maxBodySizeBytes = publishingSettings.GetMaxBodySizeBytes();
if (message.Body.Length > maxBodySizeBytes)
{
throw new IOException($"Message body size exceed the threshold, max size={maxBodySizeBytes} bytes");
}
// Generate message id.
MessageId = MessageIdGenerator.GetInstance().Next();
// For NORMAL message.
if (string.IsNullOrEmpty(message.MessageGroup) && !message.DeliveryTimestamp.HasValue &&
!txEnabled)
{
MessageType = MessageType.Normal;
return;
}
// For FIFO message.
if (!string.IsNullOrEmpty(message.MessageGroup) && !txEnabled)
{
MessageType = MessageType.Fifo;
return;
}
// For DELAY message.
if (message.DeliveryTimestamp.HasValue && !txEnabled)
{
MessageType = MessageType.Delay;
return;
}
// For TRANSACTION message.
if (!string.IsNullOrEmpty(message.MessageGroup) || message.DeliveryTimestamp.HasValue || !txEnabled)
{
throw new InternalErrorException(
"Transactional message should not set messageGroup or deliveryTimestamp");
}
MessageType = MessageType.Transaction;
}