Update generated code by IDL
diff --git a/src/main/java/apache/rocketmq/v2/Code.java b/src/main/java/apache/rocketmq/v2/Code.java
index 5bc0acb..5ee4998 100644
--- a/src/main/java/apache/rocketmq/v2/Code.java
+++ b/src/main/java/apache/rocketmq/v2/Code.java
@@ -174,6 +174,14 @@
   CLIENT_ID_REQUIRED(40017),
   /**
    * <pre>
+   * Polling time is illegal.
+   * </pre>
+   *
+   * <code>ILLEGAL_POLLING_TIME = 40018;</code>
+   */
+  ILLEGAL_POLLING_TIME(40018),
+  /**
+   * <pre>
    * Generic code indicates that the client request lacks valid authentication
    * credentials for the requested resource.
    * </pre>
@@ -558,6 +566,14 @@
   public static final int CLIENT_ID_REQUIRED_VALUE = 40017;
   /**
    * <pre>
+   * Polling time is illegal.
+   * </pre>
+   *
+   * <code>ILLEGAL_POLLING_TIME = 40018;</code>
+   */
+  public static final int ILLEGAL_POLLING_TIME_VALUE = 40018;
+  /**
+   * <pre>
    * Generic code indicates that the client request lacks valid authentication
    * credentials for the requested resource.
    * </pre>
@@ -820,6 +836,7 @@
       case 40015: return UNRECOGNIZED_CLIENT_TYPE;
       case 40016: return MESSAGE_CORRUPTED;
       case 40017: return CLIENT_ID_REQUIRED;
+      case 40018: return ILLEGAL_POLLING_TIME;
       case 40100: return UNAUTHORIZED;
       case 40200: return PAYMENT_REQUIRED;
       case 40300: return FORBIDDEN;
diff --git a/src/main/java/apache/rocketmq/v2/DeadLetterQueue.java b/src/main/java/apache/rocketmq/v2/DeadLetterQueue.java
new file mode 100644
index 0000000..8d523f8
--- /dev/null
+++ b/src/main/java/apache/rocketmq/v2/DeadLetterQueue.java
@@ -0,0 +1,753 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: apache/rocketmq/v2/definition.proto
+
+package apache.rocketmq.v2;
+
+/**
+ * Protobuf type {@code apache.rocketmq.v2.DeadLetterQueue}
+ */
+public final class DeadLetterQueue extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:apache.rocketmq.v2.DeadLetterQueue)
+    DeadLetterQueueOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use DeadLetterQueue.newBuilder() to construct.
+  private DeadLetterQueue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private DeadLetterQueue() {
+    topic_ = "";
+    messageId_ = "";
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new DeadLetterQueue();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet
+  getUnknownFields() {
+    return this.unknownFields;
+  }
+  private DeadLetterQueue(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            topic_ = s;
+            break;
+          }
+          case 18: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            messageId_ = s;
+            break;
+          }
+          default: {
+            if (!parseUnknownField(
+                input, unknownFields, extensionRegistry, tag)) {
+              done = true;
+            }
+            break;
+          }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (com.google.protobuf.UninitializedMessageException e) {
+      throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return apache.rocketmq.v2.MQDomain.internal_static_apache_rocketmq_v2_DeadLetterQueue_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return apache.rocketmq.v2.MQDomain.internal_static_apache_rocketmq_v2_DeadLetterQueue_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            apache.rocketmq.v2.DeadLetterQueue.class, apache.rocketmq.v2.DeadLetterQueue.Builder.class);
+  }
+
+  public static final int TOPIC_FIELD_NUMBER = 1;
+  private volatile java.lang.Object topic_;
+  /**
+   * <pre>
+   * Original topic for this DLQ message.
+   * </pre>
+   *
+   * <code>string topic = 1;</code>
+   * @return The topic.
+   */
+  @java.lang.Override
+  public java.lang.String getTopic() {
+    java.lang.Object ref = topic_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      topic_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * Original topic for this DLQ message.
+   * </pre>
+   *
+   * <code>string topic = 1;</code>
+   * @return The bytes for topic.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getTopicBytes() {
+    java.lang.Object ref = topic_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      topic_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int MESSAGE_ID_FIELD_NUMBER = 2;
+  private volatile java.lang.Object messageId_;
+  /**
+   * <pre>
+   * Original message id for this DLQ message.
+   * </pre>
+   *
+   * <code>string message_id = 2;</code>
+   * @return The messageId.
+   */
+  @java.lang.Override
+  public java.lang.String getMessageId() {
+    java.lang.Object ref = messageId_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      messageId_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * Original message id for this DLQ message.
+   * </pre>
+   *
+   * <code>string message_id = 2;</code>
+   * @return The bytes for messageId.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getMessageIdBytes() {
+    java.lang.Object ref = messageId_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      messageId_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(topic_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, topic_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(messageId_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, messageId_);
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(topic_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, topic_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(messageId_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, messageId_);
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof apache.rocketmq.v2.DeadLetterQueue)) {
+      return super.equals(obj);
+    }
+    apache.rocketmq.v2.DeadLetterQueue other = (apache.rocketmq.v2.DeadLetterQueue) obj;
+
+    if (!getTopic()
+        .equals(other.getTopic())) return false;
+    if (!getMessageId()
+        .equals(other.getMessageId())) return false;
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + TOPIC_FIELD_NUMBER;
+    hash = (53 * hash) + getTopic().hashCode();
+    hash = (37 * hash) + MESSAGE_ID_FIELD_NUMBER;
+    hash = (53 * hash) + getMessageId().hashCode();
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static apache.rocketmq.v2.DeadLetterQueue parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static apache.rocketmq.v2.DeadLetterQueue parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static apache.rocketmq.v2.DeadLetterQueue parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static apache.rocketmq.v2.DeadLetterQueue parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static apache.rocketmq.v2.DeadLetterQueue parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static apache.rocketmq.v2.DeadLetterQueue parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static apache.rocketmq.v2.DeadLetterQueue parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static apache.rocketmq.v2.DeadLetterQueue parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static apache.rocketmq.v2.DeadLetterQueue parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+  public static apache.rocketmq.v2.DeadLetterQueue parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static apache.rocketmq.v2.DeadLetterQueue parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static apache.rocketmq.v2.DeadLetterQueue parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(apache.rocketmq.v2.DeadLetterQueue prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * Protobuf type {@code apache.rocketmq.v2.DeadLetterQueue}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:apache.rocketmq.v2.DeadLetterQueue)
+      apache.rocketmq.v2.DeadLetterQueueOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return apache.rocketmq.v2.MQDomain.internal_static_apache_rocketmq_v2_DeadLetterQueue_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return apache.rocketmq.v2.MQDomain.internal_static_apache_rocketmq_v2_DeadLetterQueue_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              apache.rocketmq.v2.DeadLetterQueue.class, apache.rocketmq.v2.DeadLetterQueue.Builder.class);
+    }
+
+    // Construct using apache.rocketmq.v2.DeadLetterQueue.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3
+              .alwaysUseFieldBuilders) {
+      }
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      topic_ = "";
+
+      messageId_ = "";
+
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return apache.rocketmq.v2.MQDomain.internal_static_apache_rocketmq_v2_DeadLetterQueue_descriptor;
+    }
+
+    @java.lang.Override
+    public apache.rocketmq.v2.DeadLetterQueue getDefaultInstanceForType() {
+      return apache.rocketmq.v2.DeadLetterQueue.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public apache.rocketmq.v2.DeadLetterQueue build() {
+      apache.rocketmq.v2.DeadLetterQueue result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public apache.rocketmq.v2.DeadLetterQueue buildPartial() {
+      apache.rocketmq.v2.DeadLetterQueue result = new apache.rocketmq.v2.DeadLetterQueue(this);
+      result.topic_ = topic_;
+      result.messageId_ = messageId_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof apache.rocketmq.v2.DeadLetterQueue) {
+        return mergeFrom((apache.rocketmq.v2.DeadLetterQueue)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(apache.rocketmq.v2.DeadLetterQueue other) {
+      if (other == apache.rocketmq.v2.DeadLetterQueue.getDefaultInstance()) return this;
+      if (!other.getTopic().isEmpty()) {
+        topic_ = other.topic_;
+        onChanged();
+      }
+      if (!other.getMessageId().isEmpty()) {
+        messageId_ = other.messageId_;
+        onChanged();
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      apache.rocketmq.v2.DeadLetterQueue parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (apache.rocketmq.v2.DeadLetterQueue) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private java.lang.Object topic_ = "";
+    /**
+     * <pre>
+     * Original topic for this DLQ message.
+     * </pre>
+     *
+     * <code>string topic = 1;</code>
+     * @return The topic.
+     */
+    public java.lang.String getTopic() {
+      java.lang.Object ref = topic_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        topic_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * Original topic for this DLQ message.
+     * </pre>
+     *
+     * <code>string topic = 1;</code>
+     * @return The bytes for topic.
+     */
+    public com.google.protobuf.ByteString
+        getTopicBytes() {
+      java.lang.Object ref = topic_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        topic_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * Original topic for this DLQ message.
+     * </pre>
+     *
+     * <code>string topic = 1;</code>
+     * @param value The topic to set.
+     * @return This builder for chaining.
+     */
+    public Builder setTopic(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      topic_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * Original topic for this DLQ message.
+     * </pre>
+     *
+     * <code>string topic = 1;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearTopic() {
+      
+      topic_ = getDefaultInstance().getTopic();
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * Original topic for this DLQ message.
+     * </pre>
+     *
+     * <code>string topic = 1;</code>
+     * @param value The bytes for topic to set.
+     * @return This builder for chaining.
+     */
+    public Builder setTopicBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      topic_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object messageId_ = "";
+    /**
+     * <pre>
+     * Original message id for this DLQ message.
+     * </pre>
+     *
+     * <code>string message_id = 2;</code>
+     * @return The messageId.
+     */
+    public java.lang.String getMessageId() {
+      java.lang.Object ref = messageId_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        messageId_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * Original message id for this DLQ message.
+     * </pre>
+     *
+     * <code>string message_id = 2;</code>
+     * @return The bytes for messageId.
+     */
+    public com.google.protobuf.ByteString
+        getMessageIdBytes() {
+      java.lang.Object ref = messageId_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        messageId_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * Original message id for this DLQ message.
+     * </pre>
+     *
+     * <code>string message_id = 2;</code>
+     * @param value The messageId to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMessageId(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      messageId_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * Original message id for this DLQ message.
+     * </pre>
+     *
+     * <code>string message_id = 2;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMessageId() {
+      
+      messageId_ = getDefaultInstance().getMessageId();
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * Original message id for this DLQ message.
+     * </pre>
+     *
+     * <code>string message_id = 2;</code>
+     * @param value The bytes for messageId to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMessageIdBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      messageId_ = value;
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:apache.rocketmq.v2.DeadLetterQueue)
+  }
+
+  // @@protoc_insertion_point(class_scope:apache.rocketmq.v2.DeadLetterQueue)
+  private static final apache.rocketmq.v2.DeadLetterQueue DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new apache.rocketmq.v2.DeadLetterQueue();
+  }
+
+  public static apache.rocketmq.v2.DeadLetterQueue getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<DeadLetterQueue>
+      PARSER = new com.google.protobuf.AbstractParser<DeadLetterQueue>() {
+    @java.lang.Override
+    public DeadLetterQueue parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return new DeadLetterQueue(input, extensionRegistry);
+    }
+  };
+
+  public static com.google.protobuf.Parser<DeadLetterQueue> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<DeadLetterQueue> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public apache.rocketmq.v2.DeadLetterQueue getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/src/main/java/apache/rocketmq/v2/DeadLetterQueueOrBuilder.java b/src/main/java/apache/rocketmq/v2/DeadLetterQueueOrBuilder.java
new file mode 100644
index 0000000..8775fb5
--- /dev/null
+++ b/src/main/java/apache/rocketmq/v2/DeadLetterQueueOrBuilder.java
@@ -0,0 +1,49 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: apache/rocketmq/v2/definition.proto
+
+package apache.rocketmq.v2;
+
+public interface DeadLetterQueueOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:apache.rocketmq.v2.DeadLetterQueue)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * Original topic for this DLQ message.
+   * </pre>
+   *
+   * <code>string topic = 1;</code>
+   * @return The topic.
+   */
+  java.lang.String getTopic();
+  /**
+   * <pre>
+   * Original topic for this DLQ message.
+   * </pre>
+   *
+   * <code>string topic = 1;</code>
+   * @return The bytes for topic.
+   */
+  com.google.protobuf.ByteString
+      getTopicBytes();
+
+  /**
+   * <pre>
+   * Original message id for this DLQ message.
+   * </pre>
+   *
+   * <code>string message_id = 2;</code>
+   * @return The messageId.
+   */
+  java.lang.String getMessageId();
+  /**
+   * <pre>
+   * Original message id for this DLQ message.
+   * </pre>
+   *
+   * <code>string message_id = 2;</code>
+   * @return The bytes for messageId.
+   */
+  com.google.protobuf.ByteString
+      getMessageIdBytes();
+}
diff --git a/src/main/java/apache/rocketmq/v2/MQDomain.java b/src/main/java/apache/rocketmq/v2/MQDomain.java
index 4f58721..cf89ccc 100644
--- a/src/main/java/apache/rocketmq/v2/MQDomain.java
+++ b/src/main/java/apache/rocketmq/v2/MQDomain.java
@@ -75,6 +75,11 @@
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_apache_rocketmq_v2_SystemProperties_fieldAccessorTable;
   static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_apache_rocketmq_v2_DeadLetterQueue_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_apache_rocketmq_v2_DeadLetterQueue_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_apache_rocketmq_v2_Message_descriptor;
   static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
@@ -160,7 +165,7 @@
       "q.v2.Broker\022=\n\024accept_message_types\030\005 \003(" +
       "\0162\037.apache.rocketmq.v2.MessageType\"H\n\006Di" +
       "gest\022,\n\004type\030\001 \001(\0162\036.apache.rocketmq.v2." +
-      "DigestType\022\020\n\010checksum\030\002 \001(\t\"\264\007\n\020SystemP" +
+      "DigestType\022\020\n\010checksum\030\002 \001(\t\"\217\010\n\020SystemP" +
       "roperties\022\020\n\003tag\030\001 \001(\tH\000\210\001\001\022\014\n\004keys\030\002 \003(" +
       "\t\022\022\n\nmessage_id\030\003 \001(\t\022/\n\013body_digest\030\004 \001" +
       "(\0132\032.apache.rocketmq.v2.Digest\0223\n\rbody_e" +
@@ -179,107 +184,111 @@
       "sage_group\030\021 \001(\tH\007\210\001\001\022\032\n\rtrace_context\030\022" +
       " \001(\tH\010\210\001\001\022N\n&orphaned_transaction_recove" +
       "ry_duration\030\023 \001(\0132\031.google.protobuf.Dura" +
-      "tionH\t\210\001\001B\006\n\004_tagB\022\n\020_store_timestampB\025\n" +
-      "\023_delivery_timestampB\021\n\017_receipt_handleB" +
-      "\017\n\r_queue_offsetB\025\n\023_invisible_durationB" +
-      "\023\n\021_delivery_attemptB\020\n\016_message_groupB\020" +
-      "\n\016_trace_contextB)\n\'_orphaned_transactio" +
-      "n_recovery_duration\"\206\002\n\007Message\022+\n\005topic" +
-      "\030\001 \001(\0132\034.apache.rocketmq.v2.Resource\022H\n\017" +
-      "user_properties\030\002 \003(\0132/.apache.rocketmq." +
-      "v2.Message.UserPropertiesEntry\022?\n\021system" +
-      "_properties\030\003 \001(\0132$.apache.rocketmq.v2.S" +
-      "ystemProperties\022\014\n\004body\030\004 \001(\014\0325\n\023UserPro" +
-      "pertiesEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t" +
-      ":\0028\001\"E\n\nAssignment\0227\n\rmessage_queue\030\001 \001(" +
-      "\0132 .apache.rocketmq.v2.MessageQueue\"A\n\006S" +
-      "tatus\022&\n\004code\030\001 \001(\0162\030.apache.rocketmq.v2" +
-      ".Code\022\017\n\007message\030\002 \001(\t\"i\n\002UA\022.\n\010language" +
-      "\030\001 \001(\0162\034.apache.rocketmq.v2.Language\022\017\n\007" +
-      "version\030\002 \001(\t\022\020\n\010platform\030\003 \001(\t\022\020\n\010hostn" +
-      "ame\030\004 \001(\t\"\220\004\n\010Settings\0228\n\013client_type\030\001 " +
-      "\001(\0162\036.apache.rocketmq.v2.ClientTypeH\001\210\001\001" +
-      "\0228\n\014access_point\030\002 \001(\0132\035.apache.rocketmq" +
-      ".v2.EndpointsH\002\210\001\001\022<\n\016backoff_policy\030\003 \001" +
-      "(\0132\037.apache.rocketmq.v2.RetryPolicyH\003\210\001\001" +
-      "\0227\n\017request_timeout\030\004 \001(\0132\031.google.proto" +
-      "buf.DurationH\004\210\001\001\0224\n\npublishing\030\005 \001(\0132\036." +
-      "apache.rocketmq.v2.PublishingH\000\0228\n\014subsc" +
-      "ription\030\006 \001(\0132 .apache.rocketmq.v2.Subsc" +
-      "riptionH\000\022*\n\nuser_agent\030\007 \001(\0132\026.apache.r" +
-      "ocketmq.v2.UA\022*\n\006metric\030\010 \001(\0132\032.apache.r" +
-      "ocketmq.v2.MetricB\t\n\007pub_subB\016\n\014_client_" +
-      "typeB\017\n\r_access_pointB\021\n\017_backoff_policy" +
-      "B\022\n\020_request_timeout\"p\n\nPublishing\022,\n\006to" +
-      "pics\030\001 \003(\0132\034.apache.rocketmq.v2.Resource" +
-      "\022\025\n\rmax_body_size\030\002 \001(\005\022\035\n\025validate_mess" +
-      "age_type\030\003 \001(\010\"\263\002\n\014Subscription\0220\n\005group" +
-      "\030\001 \001(\0132\034.apache.rocketmq.v2.ResourceH\000\210\001" +
-      "\001\022<\n\rsubscriptions\030\002 \003(\0132%.apache.rocket" +
-      "mq.v2.SubscriptionEntry\022\021\n\004fifo\030\003 \001(\010H\001\210" +
-      "\001\001\022\037\n\022receive_batch_size\030\004 \001(\005H\002\210\001\001\022<\n\024l" +
-      "ong_polling_timeout\030\005 \001(\0132\031.google.proto" +
-      "buf.DurationH\003\210\001\001B\010\n\006_groupB\007\n\005_fifoB\025\n\023" +
-      "_receive_batch_sizeB\027\n\025_long_polling_tim" +
-      "eout\"Y\n\006Metric\022\n\n\002on\030\001 \001(\010\0225\n\tendpoints\030" +
-      "\002 \001(\0132\035.apache.rocketmq.v2.EndpointsH\000\210\001" +
-      "\001B\014\n\n_endpoints*Y\n\025TransactionResolution" +
-      "\022&\n\"TRANSACTION_RESOLUTION_UNSPECIFIED\020\000" +
-      "\022\n\n\006COMMIT\020\001\022\014\n\010ROLLBACK\020\002*W\n\021Transactio" +
-      "nSource\022\026\n\022SOURCE_UNSPECIFIED\020\000\022\021\n\rSOURC" +
-      "E_CLIENT\020\001\022\027\n\023SOURCE_SERVER_CHECK\020\002*W\n\nP" +
-      "ermission\022\032\n\026PERMISSION_UNSPECIFIED\020\000\022\010\n" +
-      "\004NONE\020\001\022\010\n\004READ\020\002\022\t\n\005WRITE\020\003\022\016\n\nREAD_WRI" +
-      "TE\020\004*;\n\nFilterType\022\033\n\027FILTER_TYPE_UNSPEC" +
-      "IFIED\020\000\022\007\n\003TAG\020\001\022\007\n\003SQL\020\002*T\n\rAddressSche" +
-      "me\022\036\n\032ADDRESS_SCHEME_UNSPECIFIED\020\000\022\010\n\004IP" +
-      "v4\020\001\022\010\n\004IPv6\020\002\022\017\n\013DOMAIN_NAME\020\003*]\n\013Messa" +
-      "geType\022\034\n\030MESSAGE_TYPE_UNSPECIFIED\020\000\022\n\n\006" +
-      "NORMAL\020\001\022\010\n\004FIFO\020\002\022\t\n\005DELAY\020\003\022\017\n\013TRANSAC" +
-      "TION\020\004*G\n\nDigestType\022\033\n\027DIGEST_TYPE_UNSP" +
-      "ECIFIED\020\000\022\t\n\005CRC32\020\001\022\007\n\003MD5\020\002\022\010\n\004SHA1\020\003*" +
-      "_\n\nClientType\022\033\n\027CLIENT_TYPE_UNSPECIFIED" +
-      "\020\000\022\014\n\010PRODUCER\020\001\022\021\n\rPUSH_CONSUMER\020\002\022\023\n\017S" +
-      "IMPLE_CONSUMER\020\003*<\n\010Encoding\022\030\n\024ENCODING" +
-      "_UNSPECIFIED\020\000\022\014\n\010IDENTITY\020\001\022\010\n\004GZIP\020\002*\342" +
-      "\t\n\004Code\022\024\n\020CODE_UNSPECIFIED\020\000\022\010\n\002OK\020\240\234\001\022" +
-      "\026\n\020MULTIPLE_RESULTS\020\260\352\001\022\021\n\013BAD_REQUEST\020\300" +
-      "\270\002\022\032\n\024ILLEGAL_ACCESS_POINT\020\301\270\002\022\023\n\rILLEGA" +
-      "L_TOPIC\020\302\270\002\022\034\n\026ILLEGAL_CONSUMER_GROUP\020\303\270" +
-      "\002\022\031\n\023ILLEGAL_MESSAGE_TAG\020\304\270\002\022\031\n\023ILLEGAL_" +
-      "MESSAGE_KEY\020\305\270\002\022\033\n\025ILLEGAL_MESSAGE_GROUP" +
-      "\020\306\270\002\022\"\n\034ILLEGAL_MESSAGE_PROPERTY_KEY\020\307\270\002" +
-      "\022\034\n\026INVALID_TRANSACTION_ID\020\310\270\002\022\030\n\022ILLEGA" +
-      "L_MESSAGE_ID\020\311\270\002\022\037\n\031ILLEGAL_FILTER_EXPRE" +
-      "SSION\020\312\270\002\022\034\n\026ILLEGAL_INVISIBLE_TIME\020\313\270\002\022" +
-      "\033\n\025ILLEGAL_DELIVERY_TIME\020\314\270\002\022\034\n\026INVALID_" +
-      "RECEIPT_HANDLE\020\315\270\002\022)\n#MESSAGE_PROPERTY_C" +
-      "ONFLICT_WITH_TYPE\020\316\270\002\022\036\n\030UNRECOGNIZED_CL" +
-      "IENT_TYPE\020\317\270\002\022\027\n\021MESSAGE_CORRUPTED\020\320\270\002\022\030" +
-      "\n\022CLIENT_ID_REQUIRED\020\321\270\002\022\022\n\014UNAUTHORIZED" +
-      "\020\244\271\002\022\026\n\020PAYMENT_REQUIRED\020\210\272\002\022\017\n\tFORBIDDE" +
-      "N\020\354\272\002\022\017\n\tNOT_FOUND\020\320\273\002\022\027\n\021MESSAGE_NOT_FO" +
-      "UND\020\321\273\002\022\025\n\017TOPIC_NOT_FOUND\020\322\273\002\022\036\n\030CONSUM" +
-      "ER_GROUP_NOT_FOUND\020\323\273\002\022\025\n\017REQUEST_TIMEOU" +
-      "T\020\340\276\002\022\027\n\021PAYLOAD_TOO_LARGE\020\324\302\002\022\034\n\026MESSAG" +
-      "E_BODY_TOO_LARGE\020\325\302\002\022\031\n\023PRECONDITION_FAI" +
-      "LED\020\260\316\002\022\027\n\021TOO_MANY_REQUESTS\020\224\317\002\022%\n\037REQU" +
-      "EST_HEADER_FIELDS_TOO_LARGE\020\334\320\002\022\"\n\034MESSA" +
-      "GE_PROPERTIES_TOO_LARGE\020\335\320\002\022\024\n\016INTERNAL_" +
-      "ERROR\020\320\206\003\022\033\n\025INTERNAL_SERVER_ERROR\020\321\206\003\022\026" +
-      "\n\020HA_NOT_AVAILABLE\020\322\206\003\022\025\n\017NOT_IMPLEMENTE" +
-      "D\020\264\207\003\022\023\n\rPROXY_TIMEOUT\020\340\211\003\022 \n\032MASTER_PER" +
-      "SISTENCE_TIMEOUT\020\341\211\003\022\037\n\031SLAVE_PERSISTENC" +
-      "E_TIMEOUT\020\342\211\003\022\021\n\013UNSUPPORTED\020\304\212\003\022\031\n\023VERS" +
-      "ION_UNSUPPORTED\020\305\212\003\022%\n\037VERIFY_FIFO_MESSA" +
-      "GE_UNSUPPORTED\020\306\212\003\022\037\n\031FAILED_TO_CONSUME_" +
-      "MESSAGE\020\340\324\003*\255\001\n\010Language\022\030\n\024LANGUAGE_UNS" +
-      "PECIFIED\020\000\022\010\n\004JAVA\020\001\022\007\n\003CPP\020\002\022\013\n\007DOT_NET" +
-      "\020\003\022\n\n\006GOLANG\020\004\022\010\n\004RUST\020\005\022\n\n\006PYTHON\020\006\022\007\n\003" +
-      "PHP\020\007\022\013\n\007NODE_JS\020\010\022\010\n\004RUBY\020\t\022\017\n\013OBJECTIV" +
-      "E_C\020\n\022\010\n\004DART\020\013\022\n\n\006KOTLIN\020\014B;\n\022apache.ro" +
-      "cketmq.v2B\010MQDomainP\001\240\001\001\330\001\001\252\002\022Apache.Roc" +
-      "ketmq.V2b\006proto3"
+      "tionH\t\210\001\001\022C\n\021dead_letter_queue\030\024 \001(\0132#.a" +
+      "pache.rocketmq.v2.DeadLetterQueueH\n\210\001\001B\006" +
+      "\n\004_tagB\022\n\020_store_timestampB\025\n\023_delivery_" +
+      "timestampB\021\n\017_receipt_handleB\017\n\r_queue_o" +
+      "ffsetB\025\n\023_invisible_durationB\023\n\021_deliver" +
+      "y_attemptB\020\n\016_message_groupB\020\n\016_trace_co" +
+      "ntextB)\n\'_orphaned_transaction_recovery_" +
+      "durationB\024\n\022_dead_letter_queue\"4\n\017DeadLe" +
+      "tterQueue\022\r\n\005topic\030\001 \001(\t\022\022\n\nmessage_id\030\002" +
+      " \001(\t\"\206\002\n\007Message\022+\n\005topic\030\001 \001(\0132\034.apache" +
+      ".rocketmq.v2.Resource\022H\n\017user_properties" +
+      "\030\002 \003(\0132/.apache.rocketmq.v2.Message.User" +
+      "PropertiesEntry\022?\n\021system_properties\030\003 \001" +
+      "(\0132$.apache.rocketmq.v2.SystemProperties" +
+      "\022\014\n\004body\030\004 \001(\014\0325\n\023UserPropertiesEntry\022\013\n" +
+      "\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"E\n\nAssignm" +
+      "ent\0227\n\rmessage_queue\030\001 \001(\0132 .apache.rock" +
+      "etmq.v2.MessageQueue\"A\n\006Status\022&\n\004code\030\001" +
+      " \001(\0162\030.apache.rocketmq.v2.Code\022\017\n\007messag" +
+      "e\030\002 \001(\t\"i\n\002UA\022.\n\010language\030\001 \001(\0162\034.apache" +
+      ".rocketmq.v2.Language\022\017\n\007version\030\002 \001(\t\022\020" +
+      "\n\010platform\030\003 \001(\t\022\020\n\010hostname\030\004 \001(\t\"\220\004\n\010S" +
+      "ettings\0228\n\013client_type\030\001 \001(\0162\036.apache.ro" +
+      "cketmq.v2.ClientTypeH\001\210\001\001\0228\n\014access_poin" +
+      "t\030\002 \001(\0132\035.apache.rocketmq.v2.EndpointsH\002" +
+      "\210\001\001\022<\n\016backoff_policy\030\003 \001(\0132\037.apache.roc" +
+      "ketmq.v2.RetryPolicyH\003\210\001\001\0227\n\017request_tim" +
+      "eout\030\004 \001(\0132\031.google.protobuf.DurationH\004\210" +
+      "\001\001\0224\n\npublishing\030\005 \001(\0132\036.apache.rocketmq" +
+      ".v2.PublishingH\000\0228\n\014subscription\030\006 \001(\0132 " +
+      ".apache.rocketmq.v2.SubscriptionH\000\022*\n\nus" +
+      "er_agent\030\007 \001(\0132\026.apache.rocketmq.v2.UA\022*" +
+      "\n\006metric\030\010 \001(\0132\032.apache.rocketmq.v2.Metr" +
+      "icB\t\n\007pub_subB\016\n\014_client_typeB\017\n\r_access" +
+      "_pointB\021\n\017_backoff_policyB\022\n\020_request_ti" +
+      "meout\"p\n\nPublishing\022,\n\006topics\030\001 \003(\0132\034.ap" +
+      "ache.rocketmq.v2.Resource\022\025\n\rmax_body_si" +
+      "ze\030\002 \001(\005\022\035\n\025validate_message_type\030\003 \001(\010\"" +
+      "\263\002\n\014Subscription\0220\n\005group\030\001 \001(\0132\034.apache" +
+      ".rocketmq.v2.ResourceH\000\210\001\001\022<\n\rsubscripti" +
+      "ons\030\002 \003(\0132%.apache.rocketmq.v2.Subscript" +
+      "ionEntry\022\021\n\004fifo\030\003 \001(\010H\001\210\001\001\022\037\n\022receive_b" +
+      "atch_size\030\004 \001(\005H\002\210\001\001\022<\n\024long_polling_tim" +
+      "eout\030\005 \001(\0132\031.google.protobuf.DurationH\003\210" +
+      "\001\001B\010\n\006_groupB\007\n\005_fifoB\025\n\023_receive_batch_" +
+      "sizeB\027\n\025_long_polling_timeout\"Y\n\006Metric\022" +
+      "\n\n\002on\030\001 \001(\010\0225\n\tendpoints\030\002 \001(\0132\035.apache." +
+      "rocketmq.v2.EndpointsH\000\210\001\001B\014\n\n_endpoints" +
+      "*Y\n\025TransactionResolution\022&\n\"TRANSACTION" +
+      "_RESOLUTION_UNSPECIFIED\020\000\022\n\n\006COMMIT\020\001\022\014\n" +
+      "\010ROLLBACK\020\002*W\n\021TransactionSource\022\026\n\022SOUR" +
+      "CE_UNSPECIFIED\020\000\022\021\n\rSOURCE_CLIENT\020\001\022\027\n\023S" +
+      "OURCE_SERVER_CHECK\020\002*W\n\nPermission\022\032\n\026PE" +
+      "RMISSION_UNSPECIFIED\020\000\022\010\n\004NONE\020\001\022\010\n\004READ" +
+      "\020\002\022\t\n\005WRITE\020\003\022\016\n\nREAD_WRITE\020\004*;\n\nFilterT" +
+      "ype\022\033\n\027FILTER_TYPE_UNSPECIFIED\020\000\022\007\n\003TAG\020" +
+      "\001\022\007\n\003SQL\020\002*T\n\rAddressScheme\022\036\n\032ADDRESS_S" +
+      "CHEME_UNSPECIFIED\020\000\022\010\n\004IPv4\020\001\022\010\n\004IPv6\020\002\022" +
+      "\017\n\013DOMAIN_NAME\020\003*]\n\013MessageType\022\034\n\030MESSA" +
+      "GE_TYPE_UNSPECIFIED\020\000\022\n\n\006NORMAL\020\001\022\010\n\004FIF" +
+      "O\020\002\022\t\n\005DELAY\020\003\022\017\n\013TRANSACTION\020\004*G\n\nDiges" +
+      "tType\022\033\n\027DIGEST_TYPE_UNSPECIFIED\020\000\022\t\n\005CR" +
+      "C32\020\001\022\007\n\003MD5\020\002\022\010\n\004SHA1\020\003*_\n\nClientType\022\033" +
+      "\n\027CLIENT_TYPE_UNSPECIFIED\020\000\022\014\n\010PRODUCER\020" +
+      "\001\022\021\n\rPUSH_CONSUMER\020\002\022\023\n\017SIMPLE_CONSUMER\020" +
+      "\003*<\n\010Encoding\022\030\n\024ENCODING_UNSPECIFIED\020\000\022" +
+      "\014\n\010IDENTITY\020\001\022\010\n\004GZIP\020\002*\376\t\n\004Code\022\024\n\020CODE" +
+      "_UNSPECIFIED\020\000\022\010\n\002OK\020\240\234\001\022\026\n\020MULTIPLE_RES" +
+      "ULTS\020\260\352\001\022\021\n\013BAD_REQUEST\020\300\270\002\022\032\n\024ILLEGAL_A" +
+      "CCESS_POINT\020\301\270\002\022\023\n\rILLEGAL_TOPIC\020\302\270\002\022\034\n\026" +
+      "ILLEGAL_CONSUMER_GROUP\020\303\270\002\022\031\n\023ILLEGAL_ME" +
+      "SSAGE_TAG\020\304\270\002\022\031\n\023ILLEGAL_MESSAGE_KEY\020\305\270\002" +
+      "\022\033\n\025ILLEGAL_MESSAGE_GROUP\020\306\270\002\022\"\n\034ILLEGAL" +
+      "_MESSAGE_PROPERTY_KEY\020\307\270\002\022\034\n\026INVALID_TRA" +
+      "NSACTION_ID\020\310\270\002\022\030\n\022ILLEGAL_MESSAGE_ID\020\311\270" +
+      "\002\022\037\n\031ILLEGAL_FILTER_EXPRESSION\020\312\270\002\022\034\n\026IL" +
+      "LEGAL_INVISIBLE_TIME\020\313\270\002\022\033\n\025ILLEGAL_DELI" +
+      "VERY_TIME\020\314\270\002\022\034\n\026INVALID_RECEIPT_HANDLE\020" +
+      "\315\270\002\022)\n#MESSAGE_PROPERTY_CONFLICT_WITH_TY" +
+      "PE\020\316\270\002\022\036\n\030UNRECOGNIZED_CLIENT_TYPE\020\317\270\002\022\027" +
+      "\n\021MESSAGE_CORRUPTED\020\320\270\002\022\030\n\022CLIENT_ID_REQ" +
+      "UIRED\020\321\270\002\022\032\n\024ILLEGAL_POLLING_TIME\020\322\270\002\022\022\n" +
+      "\014UNAUTHORIZED\020\244\271\002\022\026\n\020PAYMENT_REQUIRED\020\210\272" +
+      "\002\022\017\n\tFORBIDDEN\020\354\272\002\022\017\n\tNOT_FOUND\020\320\273\002\022\027\n\021M" +
+      "ESSAGE_NOT_FOUND\020\321\273\002\022\025\n\017TOPIC_NOT_FOUND\020" +
+      "\322\273\002\022\036\n\030CONSUMER_GROUP_NOT_FOUND\020\323\273\002\022\025\n\017R" +
+      "EQUEST_TIMEOUT\020\340\276\002\022\027\n\021PAYLOAD_TOO_LARGE\020" +
+      "\324\302\002\022\034\n\026MESSAGE_BODY_TOO_LARGE\020\325\302\002\022\031\n\023PRE" +
+      "CONDITION_FAILED\020\260\316\002\022\027\n\021TOO_MANY_REQUEST" +
+      "S\020\224\317\002\022%\n\037REQUEST_HEADER_FIELDS_TOO_LARGE" +
+      "\020\334\320\002\022\"\n\034MESSAGE_PROPERTIES_TOO_LARGE\020\335\320\002" +
+      "\022\024\n\016INTERNAL_ERROR\020\320\206\003\022\033\n\025INTERNAL_SERVE" +
+      "R_ERROR\020\321\206\003\022\026\n\020HA_NOT_AVAILABLE\020\322\206\003\022\025\n\017N" +
+      "OT_IMPLEMENTED\020\264\207\003\022\023\n\rPROXY_TIMEOUT\020\340\211\003\022" +
+      " \n\032MASTER_PERSISTENCE_TIMEOUT\020\341\211\003\022\037\n\031SLA" +
+      "VE_PERSISTENCE_TIMEOUT\020\342\211\003\022\021\n\013UNSUPPORTE" +
+      "D\020\304\212\003\022\031\n\023VERSION_UNSUPPORTED\020\305\212\003\022%\n\037VERI" +
+      "FY_FIFO_MESSAGE_UNSUPPORTED\020\306\212\003\022\037\n\031FAILE" +
+      "D_TO_CONSUME_MESSAGE\020\340\324\003*\255\001\n\010Language\022\030\n" +
+      "\024LANGUAGE_UNSPECIFIED\020\000\022\010\n\004JAVA\020\001\022\007\n\003CPP" +
+      "\020\002\022\013\n\007DOT_NET\020\003\022\n\n\006GOLANG\020\004\022\010\n\004RUST\020\005\022\n\n" +
+      "\006PYTHON\020\006\022\007\n\003PHP\020\007\022\013\n\007NODE_JS\020\010\022\010\n\004RUBY\020" +
+      "\t\022\017\n\013OBJECTIVE_C\020\n\022\010\n\004DART\020\013\022\n\n\006KOTLIN\020\014" +
+      "B;\n\022apache.rocketmq.v2B\010MQDomainP\001\240\001\001\330\001\001" +
+      "\252\002\022Apache.Rocketmq.V2b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -358,9 +367,15 @@
     internal_static_apache_rocketmq_v2_SystemProperties_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_apache_rocketmq_v2_SystemProperties_descriptor,
-        new java.lang.String[] { "Tag", "Keys", "MessageId", "BodyDigest", "BodyEncoding", "MessageType", "BornTimestamp", "BornHost", "StoreTimestamp", "StoreHost", "DeliveryTimestamp", "ReceiptHandle", "QueueId", "QueueOffset", "InvisibleDuration", "DeliveryAttempt", "MessageGroup", "TraceContext", "OrphanedTransactionRecoveryDuration", "Tag", "StoreTimestamp", "DeliveryTimestamp", "ReceiptHandle", "QueueOffset", "InvisibleDuration", "DeliveryAttempt", "MessageGroup", "TraceContext", "OrphanedTransactionRecoveryDuration", });
-    internal_static_apache_rocketmq_v2_Message_descriptor =
+        new java.lang.String[] { "Tag", "Keys", "MessageId", "BodyDigest", "BodyEncoding", "MessageType", "BornTimestamp", "BornHost", "StoreTimestamp", "StoreHost", "DeliveryTimestamp", "ReceiptHandle", "QueueId", "QueueOffset", "InvisibleDuration", "DeliveryAttempt", "MessageGroup", "TraceContext", "OrphanedTransactionRecoveryDuration", "DeadLetterQueue", "Tag", "StoreTimestamp", "DeliveryTimestamp", "ReceiptHandle", "QueueOffset", "InvisibleDuration", "DeliveryAttempt", "MessageGroup", "TraceContext", "OrphanedTransactionRecoveryDuration", "DeadLetterQueue", });
+    internal_static_apache_rocketmq_v2_DeadLetterQueue_descriptor =
       getDescriptor().getMessageTypes().get(12);
+    internal_static_apache_rocketmq_v2_DeadLetterQueue_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_apache_rocketmq_v2_DeadLetterQueue_descriptor,
+        new java.lang.String[] { "Topic", "MessageId", });
+    internal_static_apache_rocketmq_v2_Message_descriptor =
+      getDescriptor().getMessageTypes().get(13);
     internal_static_apache_rocketmq_v2_Message_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_apache_rocketmq_v2_Message_descriptor,
@@ -372,43 +387,43 @@
         internal_static_apache_rocketmq_v2_Message_UserPropertiesEntry_descriptor,
         new java.lang.String[] { "Key", "Value", });
     internal_static_apache_rocketmq_v2_Assignment_descriptor =
-      getDescriptor().getMessageTypes().get(13);
+      getDescriptor().getMessageTypes().get(14);
     internal_static_apache_rocketmq_v2_Assignment_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_apache_rocketmq_v2_Assignment_descriptor,
         new java.lang.String[] { "MessageQueue", });
     internal_static_apache_rocketmq_v2_Status_descriptor =
-      getDescriptor().getMessageTypes().get(14);
+      getDescriptor().getMessageTypes().get(15);
     internal_static_apache_rocketmq_v2_Status_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_apache_rocketmq_v2_Status_descriptor,
         new java.lang.String[] { "Code", "Message", });
     internal_static_apache_rocketmq_v2_UA_descriptor =
-      getDescriptor().getMessageTypes().get(15);
+      getDescriptor().getMessageTypes().get(16);
     internal_static_apache_rocketmq_v2_UA_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_apache_rocketmq_v2_UA_descriptor,
         new java.lang.String[] { "Language", "Version", "Platform", "Hostname", });
     internal_static_apache_rocketmq_v2_Settings_descriptor =
-      getDescriptor().getMessageTypes().get(16);
+      getDescriptor().getMessageTypes().get(17);
     internal_static_apache_rocketmq_v2_Settings_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_apache_rocketmq_v2_Settings_descriptor,
         new java.lang.String[] { "ClientType", "AccessPoint", "BackoffPolicy", "RequestTimeout", "Publishing", "Subscription", "UserAgent", "Metric", "PubSub", "ClientType", "AccessPoint", "BackoffPolicy", "RequestTimeout", });
     internal_static_apache_rocketmq_v2_Publishing_descriptor =
-      getDescriptor().getMessageTypes().get(17);
+      getDescriptor().getMessageTypes().get(18);
     internal_static_apache_rocketmq_v2_Publishing_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_apache_rocketmq_v2_Publishing_descriptor,
         new java.lang.String[] { "Topics", "MaxBodySize", "ValidateMessageType", });
     internal_static_apache_rocketmq_v2_Subscription_descriptor =
-      getDescriptor().getMessageTypes().get(18);
+      getDescriptor().getMessageTypes().get(19);
     internal_static_apache_rocketmq_v2_Subscription_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_apache_rocketmq_v2_Subscription_descriptor,
         new java.lang.String[] { "Group", "Subscriptions", "Fifo", "ReceiveBatchSize", "LongPollingTimeout", "Group", "Fifo", "ReceiveBatchSize", "LongPollingTimeout", });
     internal_static_apache_rocketmq_v2_Metric_descriptor =
-      getDescriptor().getMessageTypes().get(19);
+      getDescriptor().getMessageTypes().get(20);
     internal_static_apache_rocketmq_v2_Metric_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_apache_rocketmq_v2_Metric_descriptor,
diff --git a/src/main/java/apache/rocketmq/v2/SystemProperties.java b/src/main/java/apache/rocketmq/v2/SystemProperties.java
index 91565b3..56c231a 100644
--- a/src/main/java/apache/rocketmq/v2/SystemProperties.java
+++ b/src/main/java/apache/rocketmq/v2/SystemProperties.java
@@ -215,6 +215,19 @@
             bitField0_ |= 0x00000200;
             break;
           }
+          case 162: {
+            apache.rocketmq.v2.DeadLetterQueue.Builder subBuilder = null;
+            if (((bitField0_ & 0x00000400) != 0)) {
+              subBuilder = deadLetterQueue_.toBuilder();
+            }
+            deadLetterQueue_ = input.readMessage(apache.rocketmq.v2.DeadLetterQueue.parser(), extensionRegistry);
+            if (subBuilder != null) {
+              subBuilder.mergeFrom(deadLetterQueue_);
+              deadLetterQueue_ = subBuilder.buildPartial();
+            }
+            bitField0_ |= 0x00000400;
+            break;
+          }
           default: {
             if (!parseUnknownField(
                 input, unknownFields, extensionRegistry, tag)) {
@@ -1060,6 +1073,44 @@
     return orphanedTransactionRecoveryDuration_ == null ? com.google.protobuf.Duration.getDefaultInstance() : orphanedTransactionRecoveryDuration_;
   }
 
+  public static final int DEAD_LETTER_QUEUE_FIELD_NUMBER = 20;
+  private apache.rocketmq.v2.DeadLetterQueue deadLetterQueue_;
+  /**
+   * <pre>
+   * Information to identify whether this message is from dead letter queue.
+   * </pre>
+   *
+   * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+   * @return Whether the deadLetterQueue field is set.
+   */
+  @java.lang.Override
+  public boolean hasDeadLetterQueue() {
+    return ((bitField0_ & 0x00000400) != 0);
+  }
+  /**
+   * <pre>
+   * Information to identify whether this message is from dead letter queue.
+   * </pre>
+   *
+   * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+   * @return The deadLetterQueue.
+   */
+  @java.lang.Override
+  public apache.rocketmq.v2.DeadLetterQueue getDeadLetterQueue() {
+    return deadLetterQueue_ == null ? apache.rocketmq.v2.DeadLetterQueue.getDefaultInstance() : deadLetterQueue_;
+  }
+  /**
+   * <pre>
+   * Information to identify whether this message is from dead letter queue.
+   * </pre>
+   *
+   * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+   */
+  @java.lang.Override
+  public apache.rocketmq.v2.DeadLetterQueueOrBuilder getDeadLetterQueueOrBuilder() {
+    return deadLetterQueue_ == null ? apache.rocketmq.v2.DeadLetterQueue.getDefaultInstance() : deadLetterQueue_;
+  }
+
   private byte memoizedIsInitialized = -1;
   @java.lang.Override
   public final boolean isInitialized() {
@@ -1131,6 +1182,9 @@
     if (((bitField0_ & 0x00000200) != 0)) {
       output.writeMessage(19, getOrphanedTransactionRecoveryDuration());
     }
+    if (((bitField0_ & 0x00000400) != 0)) {
+      output.writeMessage(20, getDeadLetterQueue());
+    }
     unknownFields.writeTo(output);
   }
 
@@ -1213,6 +1267,10 @@
       size += com.google.protobuf.CodedOutputStream
         .computeMessageSize(19, getOrphanedTransactionRecoveryDuration());
     }
+    if (((bitField0_ & 0x00000400) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(20, getDeadLetterQueue());
+    }
     size += unknownFields.getSerializedSize();
     memoizedSize = size;
     return size;
@@ -1300,6 +1358,11 @@
       if (!getOrphanedTransactionRecoveryDuration()
           .equals(other.getOrphanedTransactionRecoveryDuration())) return false;
     }
+    if (hasDeadLetterQueue() != other.hasDeadLetterQueue()) return false;
+    if (hasDeadLetterQueue()) {
+      if (!getDeadLetterQueue()
+          .equals(other.getDeadLetterQueue())) return false;
+    }
     if (!unknownFields.equals(other.unknownFields)) return false;
     return true;
   }
@@ -1376,6 +1439,10 @@
       hash = (37 * hash) + ORPHANED_TRANSACTION_RECOVERY_DURATION_FIELD_NUMBER;
       hash = (53 * hash) + getOrphanedTransactionRecoveryDuration().hashCode();
     }
+    if (hasDeadLetterQueue()) {
+      hash = (37 * hash) + DEAD_LETTER_QUEUE_FIELD_NUMBER;
+      hash = (53 * hash) + getDeadLetterQueue().hashCode();
+    }
     hash = (29 * hash) + unknownFields.hashCode();
     memoizedHashCode = hash;
     return hash;
@@ -1508,6 +1575,7 @@
         getDeliveryTimestampFieldBuilder();
         getInvisibleDurationFieldBuilder();
         getOrphanedTransactionRecoveryDurationFieldBuilder();
+        getDeadLetterQueueFieldBuilder();
       }
     }
     @java.lang.Override
@@ -1575,6 +1643,12 @@
         orphanedTransactionRecoveryDurationBuilder_.clear();
       }
       bitField0_ = (bitField0_ & ~0x00000400);
+      if (deadLetterQueueBuilder_ == null) {
+        deadLetterQueue_ = null;
+      } else {
+        deadLetterQueueBuilder_.clear();
+      }
+      bitField0_ = (bitField0_ & ~0x00000800);
       return this;
     }
 
@@ -1680,6 +1754,14 @@
         }
         to_bitField0_ |= 0x00000200;
       }
+      if (((from_bitField0_ & 0x00000800) != 0)) {
+        if (deadLetterQueueBuilder_ == null) {
+          result.deadLetterQueue_ = deadLetterQueue_;
+        } else {
+          result.deadLetterQueue_ = deadLetterQueueBuilder_.build();
+        }
+        to_bitField0_ |= 0x00000400;
+      }
       result.bitField0_ = to_bitField0_;
       onBuilt();
       return result;
@@ -1804,6 +1886,9 @@
       if (other.hasOrphanedTransactionRecoveryDuration()) {
         mergeOrphanedTransactionRecoveryDuration(other.getOrphanedTransactionRecoveryDuration());
       }
+      if (other.hasDeadLetterQueue()) {
+        mergeDeadLetterQueue(other.getDeadLetterQueue());
+      }
       this.mergeUnknownFields(other.unknownFields);
       onChanged();
       return this;
@@ -4015,6 +4100,162 @@
       }
       return orphanedTransactionRecoveryDurationBuilder_;
     }
+
+    private apache.rocketmq.v2.DeadLetterQueue deadLetterQueue_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+        apache.rocketmq.v2.DeadLetterQueue, apache.rocketmq.v2.DeadLetterQueue.Builder, apache.rocketmq.v2.DeadLetterQueueOrBuilder> deadLetterQueueBuilder_;
+    /**
+     * <pre>
+     * Information to identify whether this message is from dead letter queue.
+     * </pre>
+     *
+     * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+     * @return Whether the deadLetterQueue field is set.
+     */
+    public boolean hasDeadLetterQueue() {
+      return ((bitField0_ & 0x00000800) != 0);
+    }
+    /**
+     * <pre>
+     * Information to identify whether this message is from dead letter queue.
+     * </pre>
+     *
+     * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+     * @return The deadLetterQueue.
+     */
+    public apache.rocketmq.v2.DeadLetterQueue getDeadLetterQueue() {
+      if (deadLetterQueueBuilder_ == null) {
+        return deadLetterQueue_ == null ? apache.rocketmq.v2.DeadLetterQueue.getDefaultInstance() : deadLetterQueue_;
+      } else {
+        return deadLetterQueueBuilder_.getMessage();
+      }
+    }
+    /**
+     * <pre>
+     * Information to identify whether this message is from dead letter queue.
+     * </pre>
+     *
+     * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+     */
+    public Builder setDeadLetterQueue(apache.rocketmq.v2.DeadLetterQueue value) {
+      if (deadLetterQueueBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        deadLetterQueue_ = value;
+        onChanged();
+      } else {
+        deadLetterQueueBuilder_.setMessage(value);
+      }
+      bitField0_ |= 0x00000800;
+      return this;
+    }
+    /**
+     * <pre>
+     * Information to identify whether this message is from dead letter queue.
+     * </pre>
+     *
+     * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+     */
+    public Builder setDeadLetterQueue(
+        apache.rocketmq.v2.DeadLetterQueue.Builder builderForValue) {
+      if (deadLetterQueueBuilder_ == null) {
+        deadLetterQueue_ = builderForValue.build();
+        onChanged();
+      } else {
+        deadLetterQueueBuilder_.setMessage(builderForValue.build());
+      }
+      bitField0_ |= 0x00000800;
+      return this;
+    }
+    /**
+     * <pre>
+     * Information to identify whether this message is from dead letter queue.
+     * </pre>
+     *
+     * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+     */
+    public Builder mergeDeadLetterQueue(apache.rocketmq.v2.DeadLetterQueue value) {
+      if (deadLetterQueueBuilder_ == null) {
+        if (((bitField0_ & 0x00000800) != 0) &&
+            deadLetterQueue_ != null &&
+            deadLetterQueue_ != apache.rocketmq.v2.DeadLetterQueue.getDefaultInstance()) {
+          deadLetterQueue_ =
+            apache.rocketmq.v2.DeadLetterQueue.newBuilder(deadLetterQueue_).mergeFrom(value).buildPartial();
+        } else {
+          deadLetterQueue_ = value;
+        }
+        onChanged();
+      } else {
+        deadLetterQueueBuilder_.mergeFrom(value);
+      }
+      bitField0_ |= 0x00000800;
+      return this;
+    }
+    /**
+     * <pre>
+     * Information to identify whether this message is from dead letter queue.
+     * </pre>
+     *
+     * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+     */
+    public Builder clearDeadLetterQueue() {
+      if (deadLetterQueueBuilder_ == null) {
+        deadLetterQueue_ = null;
+        onChanged();
+      } else {
+        deadLetterQueueBuilder_.clear();
+      }
+      bitField0_ = (bitField0_ & ~0x00000800);
+      return this;
+    }
+    /**
+     * <pre>
+     * Information to identify whether this message is from dead letter queue.
+     * </pre>
+     *
+     * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+     */
+    public apache.rocketmq.v2.DeadLetterQueue.Builder getDeadLetterQueueBuilder() {
+      bitField0_ |= 0x00000800;
+      onChanged();
+      return getDeadLetterQueueFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * Information to identify whether this message is from dead letter queue.
+     * </pre>
+     *
+     * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+     */
+    public apache.rocketmq.v2.DeadLetterQueueOrBuilder getDeadLetterQueueOrBuilder() {
+      if (deadLetterQueueBuilder_ != null) {
+        return deadLetterQueueBuilder_.getMessageOrBuilder();
+      } else {
+        return deadLetterQueue_ == null ?
+            apache.rocketmq.v2.DeadLetterQueue.getDefaultInstance() : deadLetterQueue_;
+      }
+    }
+    /**
+     * <pre>
+     * Information to identify whether this message is from dead letter queue.
+     * </pre>
+     *
+     * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        apache.rocketmq.v2.DeadLetterQueue, apache.rocketmq.v2.DeadLetterQueue.Builder, apache.rocketmq.v2.DeadLetterQueueOrBuilder> 
+        getDeadLetterQueueFieldBuilder() {
+      if (deadLetterQueueBuilder_ == null) {
+        deadLetterQueueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            apache.rocketmq.v2.DeadLetterQueue, apache.rocketmq.v2.DeadLetterQueue.Builder, apache.rocketmq.v2.DeadLetterQueueOrBuilder>(
+                getDeadLetterQueue(),
+                getParentForChildren(),
+                isClean());
+        deadLetterQueue_ = null;
+      }
+      return deadLetterQueueBuilder_;
+    }
     @java.lang.Override
     public final Builder setUnknownFields(
         final com.google.protobuf.UnknownFieldSet unknownFields) {
diff --git a/src/main/java/apache/rocketmq/v2/SystemPropertiesOrBuilder.java b/src/main/java/apache/rocketmq/v2/SystemPropertiesOrBuilder.java
index e9bd416..2c47b6d 100644
--- a/src/main/java/apache/rocketmq/v2/SystemPropertiesOrBuilder.java
+++ b/src/main/java/apache/rocketmq/v2/SystemPropertiesOrBuilder.java
@@ -506,4 +506,31 @@
    * <code>optional .google.protobuf.Duration orphaned_transaction_recovery_duration = 19;</code>
    */
   com.google.protobuf.DurationOrBuilder getOrphanedTransactionRecoveryDurationOrBuilder();
+
+  /**
+   * <pre>
+   * Information to identify whether this message is from dead letter queue.
+   * </pre>
+   *
+   * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+   * @return Whether the deadLetterQueue field is set.
+   */
+  boolean hasDeadLetterQueue();
+  /**
+   * <pre>
+   * Information to identify whether this message is from dead letter queue.
+   * </pre>
+   *
+   * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+   * @return The deadLetterQueue.
+   */
+  apache.rocketmq.v2.DeadLetterQueue getDeadLetterQueue();
+  /**
+   * <pre>
+   * Information to identify whether this message is from dead letter queue.
+   * </pre>
+   *
+   * <code>optional .apache.rocketmq.v2.DeadLetterQueue dead_letter_queue = 20;</code>
+   */
+  apache.rocketmq.v2.DeadLetterQueueOrBuilder getDeadLetterQueueOrBuilder();
 }