好的，我们可以通过 gcloud CLI 完成你这个简单的 Pub/Sub 测试，包括：
	•	创建 Topic
	•	创建 Subscription（pull 模式，ackDeadline 和 retention 时间可控）
	•	发布消息
	•	拉取并 ACK 或不 ACK 消息
	•	查看消息是否堆积或被丢弃

以下是完整的操作命令，按照你的需求编排，并包含查看与测试部分。

---

✅ 创建 Topic
```bash
gcloud pubsub topics create lex-test-topic --topic-encryption-key=project/kms-project/locations/global/keyRings/pubSub/cryptoKeys/lex-test-topic
```

---

✅ 创建 Subscription（设置 ackDeadline 和 retention）
```bash
gcloud pubsub subscriptions create lex-test-sub \
  --topic=lex-test-topic \
  --ack-deadline=30 \
  --message-retention-duration=900s \
  --expiration-period=never
```
说明：
	•	--ack-deadline=30：ACK 超时时间 30 秒
	•	--message-retention-duration=900s：15 分钟未被 ACK 将删除
	•	--expiration-period=never：subscription 不会因长期不使用而自动删除

---

✅ 推送消息到 Topic
```bash
gcloud pubsub topics publish lex-test-topic --message="test-1"
gcloud pubsub topics publish lex-test-topic --message="test-2"
```

---

✅ 拉取消息但不 ACK（观察是否重发）
```bash
gcloud pubsub subscriptions pull lex-test-sub --limit=1
```
默认此命令不会 ACK 消息。如果你不显式 ACK，它将在 30 秒后被重新投递。

---

✅ 拉取并自动 ACK（确认消费）
```bash
gcloud pubsub subscriptions pull lex-test-sub --limit=1 --auto-ack
```

---

✅ 查看 Subscription 状态（消息是否堆积）

```bash
gcloud pubsub subscriptions describe lex-test-sub
```

重点关注：
	•	unackedMessages
	•	messageRetentionDuration

如你想持续观察消息堆积，可运行：

```bash
watch -n 5 "gcloud pubsub subscriptions describe lex-test-sub | grep -E 'unackedMessages|messageRetentionDuration'"
```

---

✅ 删除测试资源（可选）

```bash
gcloud pubsub subscriptions delete lex-test-sub
gcloud pubsub topics delete lex-test-topic
```

---

🔁 测试建议流程

```mermaid
graph TD;
    A[创建 Topic:lex-test-topic] --> B[创建 Subscription:lex-test-sub];
    B --> C[推送消息到 Topic];
    C --> D[不ACK地拉取消息];
    D --> E[观察是否重复投递(30s)];
    E --> F[15分钟内仍未ACK];
    F --> G[消息被删除];
```

---

📌 注意点
	•	每条消息默认最多投递 7 天内（不受你设置的 15 分钟 retention 限制，除非设置 retention < 7 天）
	•	重复投递不会立刻在 gcloud pull 命令中看到（除非你主动等待30秒后再拉取）
	•	为了更真实测试 ACK 机制，可以用脚本轮询拉取并不 ACK，然后观察是否有重复的 messageId 出现

---

如果你想，我还可以写个 shell 脚本来模拟“拉而不ACK”的测试流程。需要的话告诉我即可。
