diff --git a/.changelog/3319.txt b/.changelog/3319.txt
new file mode 100644
index 0000000000..1b755e5d60
--- /dev/null
+++ b/.changelog/3319.txt
@@ -0,0 +1,3 @@
+```release-note:enhancement
+resource/tencentcloud_tdmq_rabbitmq_vip_instance: support `tags`
+```
\ No newline at end of file
diff --git a/tencentcloud/services/tdmq/service_tencentcloud_tdmq.go b/tencentcloud/services/tdmq/service_tencentcloud_tdmq.go
index b234ab01bb..3ca9101ea7 100644
--- a/tencentcloud/services/tdmq/service_tencentcloud_tdmq.go
+++ b/tencentcloud/services/tdmq/service_tencentcloud_tdmq.go
@@ -1672,6 +1672,7 @@ func (me *TdmqService) DescribeTdmqRabbitmqVipInstanceById(ctx context.Context,
 	logId := tccommon.GetLogId(ctx)
 
 	request := tdmq.NewDescribeRabbitMQVipInstanceRequest()
+	response := tdmq.NewDescribeRabbitMQVipInstanceResponse()
 	request.ClusterId = &instanceId
 
 	defer func() {
@@ -1680,17 +1681,29 @@ func (me *TdmqService) DescribeTdmqRabbitmqVipInstanceById(ctx context.Context,
 		}
 	}()
 
-	ratelimit.Check(request.GetAction())
 	var iacExtInfo connectivity.IacExtInfo
-	iacExtInfo.InstanceId = instanceId
-	response, err := me.client.UseTdmqClient(iacExtInfo).DescribeRabbitMQVipInstance(request)
+	err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
+		ratelimit.Check(request.GetAction())
+		result, e := me.client.UseTdmqClient(iacExtInfo).DescribeRabbitMQVipInstance(request)
+		if e != nil {
+			return tccommon.RetryError(e)
+		} else {
+			log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
+		}
+
+		if result == nil || result.Response == nil {
+			return resource.NonRetryableError(fmt.Errorf("Describe tdmq rabbitmqVipInstance failed, Response is nil."))
+		}
+
+		response = result
+		return nil
+	})
+
 	if err != nil {
 		errRet = err
 		return
 	}
 
-	log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
-
 	rabbitmqVipInstance = response.Response
 	return
 }
diff --git a/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.go b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.go
index 639ad8d5c0..8acb153c41 100644
--- a/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.go
+++ b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.go
@@ -2,6 +2,7 @@ package trabbit
 
 import (
 	tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
+	svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"
 	svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq"
 
 	"context"
@@ -88,6 +89,11 @@ func ResourceTencentCloudTdmqRabbitmqVipInstance() *schema.Resource {
 				Computed:    true,
 				Description: "Cluster version, the default is `3.8.30`, valid values: `3.8.30` and `3.11.8`.",
 			},
+			"tags": {
+				Type:        schema.TypeMap,
+				Optional:    true,
+				Description: "Tag description list.",
+			},
 			"public_access_endpoint": {
 				Type:        schema.TypeString,
 				Computed:    true,
@@ -199,6 +205,10 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceCreate(d *schema.ResourceData, m
 			log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
 		}
 
+		if result == nil || result.Response == nil {
+			return resource.NonRetryableError(fmt.Errorf("Create tdmq rabbitmqVipInstance failed, Response is nil."))
+		}
+
 		response = result
 		return nil
 	})
@@ -208,6 +218,10 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceCreate(d *schema.ResourceData, m
 		return err
 	}
 
+	if response.Response.InstanceId == nil {
+		return fmt.Errorf("InstanceId is nil.")
+	}
+
 	instanceId = *response.Response.InstanceId
 
 	// wait
@@ -248,6 +262,15 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceCreate(d *schema.ResourceData, m
 
 	d.SetId(instanceId)
 
+	if tags := helper.GetTags(d, "tags"); len(tags) > 0 {
+		tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn())
+		region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region
+		resourceName := fmt.Sprintf("qcs::tdmq:%s:uin/:cluster/%s", region, d.Id())
+		if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil {
+			return err
+		}
+	}
+
 	return resourceTencentCloudTdmqRabbitmqVipInstanceRead(d, meta)
 }
 
@@ -338,17 +361,22 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceRead(d *schema.ResourceData, met
 				if vpc.VpcId != nil {
 					vpcMap["vpc_id"] = vpc.VpcId
 				}
+
 				if vpc.SubnetId != nil {
 					vpcMap["subnet_id"] = vpc.SubnetId
 				}
+
 				if vpc.VpcEndpoint != nil {
 					vpcMap["vpc_endpoint"] = vpc.VpcEndpoint
 				}
+
 				if vpc.VpcDataStreamEndpointStatus != nil {
 					vpcMap["vpc_data_stream_endpoint_status"] = vpc.VpcDataStreamEndpointStatus
 				}
+
 				tmpList = append(tmpList, vpcMap)
 			}
+
 			_ = d.Set("vpcs", tmpList)
 		}
 
@@ -361,6 +389,15 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceRead(d *schema.ResourceData, met
 		return nil
 	}
 
+	tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn()
+	tagService := svctag.NewTagService(tcClient)
+	tags, err := tagService.DescribeResourceTags(ctx, "tdmq", "cluster", tcClient.Region, d.Id())
+	if err != nil {
+		return err
+	}
+
+	_ = d.Set("tags", tags)
+
 	return nil
 }
 
@@ -386,28 +423,39 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceUpdate(d *schema.ResourceData, m
 		}
 	}
 
-	request.InstanceId = &instanceId
-
 	if d.HasChange("cluster_name") {
 		if v, ok := d.GetOk("cluster_name"); ok {
 			request.ClusterName = helper.String(v.(string))
 		}
-	}
 
-	err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
-		result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyRabbitMQVipInstance(request)
-		if e != nil {
-			return tccommon.RetryError(e)
-		} else {
-			log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
-		}
+		request.InstanceId = &instanceId
+		err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
+			result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyRabbitMQVipInstance(request)
+			if e != nil {
+				return tccommon.RetryError(e)
+			} else {
+				log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
+			}
 
-		return nil
-	})
+			return nil
+		})
 
-	if err != nil {
-		log.Printf("[CRITAL]%s update tdmq rabbitmqVipInstance failed, reason:%+v", logId, err)
-		return err
+		if err != nil {
+			log.Printf("[CRITAL]%s update tdmq rabbitmqVipInstance failed, reason:%+v", logId, err)
+			return err
+		}
+	}
+
+	if d.HasChange("tags") {
+		ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+		tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn()
+		tagService := svctag.NewTagService(tcClient)
+		oldTags, newTags := d.GetChange("tags")
+		replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{}))
+		resourceName := tccommon.BuildTagResourceName("tdmq", "cluster", tcClient.Region, d.Id())
+		if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil {
+			return err
+		}
 	}
 
 	return resourceTencentCloudTdmqRabbitmqVipInstanceRead(d, meta)
@@ -424,7 +472,16 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceDelete(d *schema.ResourceData, m
 		instanceId = d.Id()
 	)
 
-	if err := service.DeleteTdmqRabbitmqVipInstanceById(ctx, instanceId); err != nil {
+	err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
+		e := service.DeleteTdmqRabbitmqVipInstanceById(ctx, instanceId)
+		if e != nil {
+			return tccommon.RetryError(e)
+		}
+
+		return nil
+	})
+
+	if err != nil {
 		return err
 	}
 
diff --git a/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.md b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.md
index f14fa42797..88dab9d00a 100644
--- a/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.md
+++ b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.md
@@ -2,6 +2,8 @@ Provides a resource to create a TDMQ rabbitmq vip instance
 
 Example Usage
 
+Create prepaid rabbitmq instance
+
 ```hcl
 data "tencentcloud_availability_zones" "zones" {
   name = "ap-guangzhou-6"
@@ -27,21 +29,27 @@ resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example" {
   zone_ids                              = [data.tencentcloud_availability_zones.zones.zones.0.id]
   vpc_id                                = tencentcloud_vpc.vpc.id
   subnet_id                             = tencentcloud_subnet.subnet.id
-  cluster_name                          = "tf-example-rabbitmq-vip-instance"
+  cluster_name                          = "tf-example"
   node_spec                             = "rabbit-vip-basic-1"
   node_num                              = 1
   storage_size                          = 200
   enable_create_default_ha_mirror_queue = false
   auto_renew_flag                       = true
   time_span                             = 1
+  tags = {
+    createBy = "Terraform"
+  }
 }
+```
+
+Create postpaid rabbitmq instance
 
-# create postpaid rabbitmq instance
-resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example2" {
+```hcl
+resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example" {
   zone_ids                              = [data.tencentcloud_availability_zones.zones.zones.0.id]
   vpc_id                                = tencentcloud_vpc.vpc.id
   subnet_id                             = tencentcloud_subnet.subnet.id
-  cluster_name                          = "tf-example-rabbitmq-vip-instance"
+  cluster_name                          = "tf-example"
   node_spec                             = "rabbit-vip-basic-1"
   node_num                              = 1
   storage_size                          = 200
@@ -50,6 +58,9 @@ resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example2" {
   time_span                             = 1
   pay_mode                              = 0
   cluster_version                       = "3.11.8"
+  tags = {
+    createBy = "Terraform"
+  }
 }
 ```
 
@@ -60,4 +71,3 @@ TDMQ rabbitmq vip instance can be imported using the id, e.g.
 ```
 terraform import tencentcloud_tdmq_rabbitmq_vip_instance.example amqp-mok52gmn
 ```
-
diff --git a/website/docs/r/tdmq_rabbitmq_vip_instance.html.markdown b/website/docs/r/tdmq_rabbitmq_vip_instance.html.markdown
index 7143d26e0a..6550d7125f 100644
--- a/website/docs/r/tdmq_rabbitmq_vip_instance.html.markdown
+++ b/website/docs/r/tdmq_rabbitmq_vip_instance.html.markdown
@@ -13,6 +13,8 @@ Provides a resource to create a TDMQ rabbitmq vip instance
 
 ## Example Usage
 
+### Create prepaid rabbitmq instance
+
 ```hcl
 data "tencentcloud_availability_zones" "zones" {
   name = "ap-guangzhou-6"
@@ -38,21 +40,27 @@ resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example" {
   zone_ids                              = [data.tencentcloud_availability_zones.zones.zones.0.id]
   vpc_id                                = tencentcloud_vpc.vpc.id
   subnet_id                             = tencentcloud_subnet.subnet.id
-  cluster_name                          = "tf-example-rabbitmq-vip-instance"
+  cluster_name                          = "tf-example"
   node_spec                             = "rabbit-vip-basic-1"
   node_num                              = 1
   storage_size                          = 200
   enable_create_default_ha_mirror_queue = false
   auto_renew_flag                       = true
   time_span                             = 1
+  tags = {
+    createBy = "Terraform"
+  }
 }
+```
+
+### Create postpaid rabbitmq instance
 
-# create postpaid rabbitmq instance
-resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example2" {
+```hcl
+resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example" {
   zone_ids                              = [data.tencentcloud_availability_zones.zones.zones.0.id]
   vpc_id                                = tencentcloud_vpc.vpc.id
   subnet_id                             = tencentcloud_subnet.subnet.id
-  cluster_name                          = "tf-example-rabbitmq-vip-instance"
+  cluster_name                          = "tf-example"
   node_spec                             = "rabbit-vip-basic-1"
   node_num                              = 1
   storage_size                          = 200
@@ -61,6 +69,9 @@ resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example2" {
   time_span                             = 1
   pay_mode                              = 0
   cluster_version                       = "3.11.8"
+  tags = {
+    createBy = "Terraform"
+  }
 }
 ```
 
@@ -79,6 +90,7 @@ The following arguments are supported:
 * `node_spec` - (Optional, String) Node specifications. Valid values: rabbit-vip-basic-5 (for 2C4G), rabbit-vip-profession-2c8g (for 2C8G), rabbit-vip-basic-1 (for 4C8G), rabbit-vip-profession-4c16g (for 4C16G), rabbit-vip-basic-2 (for 8C16G), rabbit-vip-profession-8c32g (for 8C32G), rabbit-vip-basic-4 (for 16C32G), rabbit-vip-profession-16c64g (for 16C64G). The default is rabbit-vip-basic-1. NOTE: The above specifications may be sold out or removed from the shelves.
 * `pay_mode` - (Optional, Int) Payment method: 0 indicates postpaid; 1 indicates prepaid. Default: prepaid.
 * `storage_size` - (Optional, Int) Single node storage specification, the default is 200G.
+* `tags` - (Optional, Map) Tag description list.
 * `time_span` - (Optional, Int) Purchase duration, the default is 1 (month).
 
 ## Attributes Reference