Fix a series of issues (#533)
* Using poetry as dependencies management & publishing tools
* Rename rocketmq-client to rocketmq
* Add publishing Steps
* Add logging module support
* Format code
* fix style & license issues
* add license for python client protocol
---------
Co-authored-by: Aaron Ai <yangkun.ayk@alibaba-inc.com>
Co-authored-by: Aaron Ai <yangkun.ayk@gmail.com>
diff --git a/.github/workflows/python_build.yml b/.github/workflows/python_build.yml
index 2fd44c0..cbee516 100644
--- a/.github/workflows/python_build.yml
+++ b/.github/workflows/python_build.yml
@@ -15,7 +15,7 @@
- run: python -m pip install flake8
- name: flake8
run: |
- flake8 --ignore=E501,W503 --exclude python/protocol python
+ flake8 --ignore=E501,W503 --exclude python/rocketmq/protocol python
isort:
runs-on: ubuntu-latest
steps:
@@ -28,7 +28,7 @@
- run: python -m pip install isort
- name: isort
run: |
- isort --check --diff --skip python/protocol python
+ isort --check --diff --skip python/rocketmq/protocol python
black:
runs-on: ubuntu-latest
steps:
diff --git a/.gitignore b/.gitignore
index c917b4b..00a3ab0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -52,4 +52,5 @@
*.pyo
*.pyd
python/myvenv/
-python/__pycache__/
\ No newline at end of file
+python/__pycache__/
+python/dist
\ No newline at end of file
diff --git a/python/README-CN.md b/python/README-CN.md
index bc41711..3832808 100644
--- a/python/README-CN.md
+++ b/python/README-CN.md
@@ -13,26 +13,31 @@
## 快速开始
-推荐使用 Python 虚拟环境进行开发,可以按照以下步骤操作:
+我们使用 Poetry 作为依赖管理和发布的工具。你可以在 Poetry 的[官方网站]((https://python-poetry.org/))了解到关于它的更多信息。这里是一些在开发阶段你会使用到的 Poetry 命令:
-首先切换到当前仓库的 `python` 子目录,然后执行以下命令创建一个新的虚拟环境:
-
-```sh
-python3 -m venv myvenv
+```shell
+# 创建并激活 python3 的虚拟环境
+poetry env use python3
+# 自动安装工程相关的依赖
+poetry install
+# 进入虚拟环境中的 shell
+poetry shell
```
-其次开始激活虚拟环境。激活方法取决于具体的操作系统:
+我们使用 pytest 来作为当前项目的测试框架,你可以通过直接执行 `pytest` 命令来运行所有的测试。
-* 对于Windows,执行:`myvenv\Scripts\activate.bat`
-* 对于macOS/Linux:执行:`source myvenv/bin/activate`
+## 发布步骤
-执行以下命令以安装所需的依赖库:
+我们使用 PyPi 来帮助用户更好地在自己的工程中引入并使用客户端。为了将客户端发布到 PyPi,可以执行以下命令:
-```sh
-pip install -r requirements.txt
+```shell
+# 构建包
+poetry build
+# 将包发布到远程仓库
+poetry publish -u username -p password
```
## 目前进展
-* 协议层代码生成完毕
-* rpcClient完成部分
+* 协议层代码生成完毕。
+* `rpc_client.py` 完成部分。
diff --git a/python/README.md b/python/README.md
index 4bb60f8..256548e 100644
--- a/python/README.md
+++ b/python/README.md
@@ -13,27 +13,31 @@
## Getting Started
-Clone the current repository to your local machine and set up a virtual environment for development, which will help you manage dependencies more efficiently. Follow the steps below:
+We are using Poetry as the dependency management & publishing tool. You can find out more details about Poetry from its [website](https://python-poetry.org/). Here is the related command of Poetry you may use for development.
-Navigate to the `python` subdirectory and execute the command below to create a new virtual environment:
-
-```sh
-python3 -m venv myvenv
+```shell
+# Create a virtual environment and activate it.
+poetry env use python3
+# Installs the project dependencies.
+poetry install
+# Spawns a shell within the virtual environment.
+poetry shell
```
-Activate the virtual environment. The activation method depends on your operating system:
+We use pytest as the testing framework for the current project, and you can execute `pytest` directly to run all tests.
-* For Windows, execute: `myvenv\Scripts\activate.bat`
-* For macOS/Linux: execute: `source myvenv/bin/activate`
+## Publishing Steps
-Install the required dependency libraries by executing the following command:
+We utilize PyPI to help users easily introduce and use the Python client in their projects. To publish a package to PyPI, please register an account in advance, then execute the following command.
-```sh
-pip install -r requirements.txt
+```shell
+# Builds a package, as a tarball and a wheel by default.
+poetry build
+# Publishes a package to a remote repository.
+poetry publish -u username -p password
```
## Current Progress
* Protocol layer code generation is completed.
-
-* Partial completion of rpcClient.
+* Partial completion of `rpc_client.py`.
diff --git a/python/client/rpc_client.py b/python/client/rpc_client.py
deleted file mode 100644
index 1ed9b5e..0000000
--- a/python/client/rpc_client.py
+++ /dev/null
@@ -1,106 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import time
-from datetime import timedelta
-
-import protocol.service_pb2_grpc as service
-from grpc import aio, insecure_channel, ssl_channel_credentials
-
-
-class RpcClient:
- CONNECT_TIMEOUT_MILLIS = 3 * 1000
- GRPC_MAX_MESSAGE_SIZE = 2 * 31 - 1
-
- def __init__(self, endpoints, ssl_enabled):
- channel_options = [
- ("grpc.max_send_message_length", -1),
- ("grpc.max_receive_message_length", -1),
- ("grpc.connect_timeout_ms", self.CONNECT_TIMEOUT_MILLIS),
- ]
- if ssl_enabled:
- ssl_credentials = ssl_channel_credentials()
- self.channel = aio.secure_channel(
- endpoints.getGrpcTarget(), ssl_credentials, options=channel_options
- )
- else:
- self.channel = insecure_channel(
- endpoints.getGrpcTarget(), options=channel_options
- )
-
- self.activity_nano_time = time.monotonic_ns()
-
- def __del__(self):
- self.channel.close()
-
- def idle_duration(self):
- return timedelta(
- microseconds=(time.monotonic_ns() - self.activity_nano_time) / 1000
- )
-
- async def query_route(self, request, timeout_seconds: int):
- self.activity_nano_time = time.monotonic_ns()
- stub = service.MessagingServiceStub(self.channel)
- return await stub.QueryRoute(request, timeout=timeout_seconds)
-
- async def heartbeat(self, request, timeout_seconds: int):
- self.activity_nano_time = time.monotonic_ns()
- stub = service.MessagingServiceStub(self.channel)
- return await stub.Heartbeat(request, timeout=timeout_seconds)
-
- async def send_message(self, request, timeout_seconds: int):
- self.activity_nano_time = time.monotonic_ns()
- stub = service.MessagingServiceStub(self.channel)
- return await stub.SendMessage(request, timeout=timeout_seconds)
-
- async def query_assignment(self, request, timeout_seconds: int):
- self.activity_nano_time = time.monotonic_ns()
- stub = service.MessagingServiceStub(self.channel)
- return await stub.QueryAssignment(request, timeout=timeout_seconds)
-
- # TODO: Not yet implemented
- async def receive_message(self, metadata, request, timeout_seconds: int):
- pass
-
- async def ack_message(self, request, timeout_seconds: int):
- self.activity_nano_time = time.monotonic_ns()
- stub = service.MessagingServiceStub(self.channel)
- return await stub.AckMessage(request, timeout=timeout_seconds)
-
- async def change_invisible_duration(self, request, timeout_seconds: int):
- self.activity_nano_time = time.monotonic_ns()
- stub = service.MessagingServiceStub(self.channel)
- return await stub.ChangeInvisibleDuration(request, timeout=timeout_seconds)
-
- async def forward_message_to_dead_letter_queue(self, request, timeout_seconds: int):
- self.activity_nano_time = time.monotonic_ns()
- stub = service.MessagingServiceStub(self.channel)
- return await stub.ForwardMessageToDeadLetterQueue(
- request, timeout=timeout_seconds
- )
-
- async def end_transaction(self, request, timeout_seconds: int):
- self.activity_nano_time = time.monotonic_ns()
- stub = service.MessagingServiceStub(self.channel)
- return await stub.EndTransaction(request, timeout=timeout_seconds)
-
- async def notify_client_termination(self, request, timeout_seconds: int):
- self.activity_nano_time = time.monotonic_ns()
- stub = service.MessagingServiceStub(self.channel)
- return await stub.NotifyClientTermination(request, timeout=timeout_seconds)
-
- # TODO: Not yet implemented
- async def telemetry(self, metadata, duration, response_observer):
- pass
diff --git a/python/poetry.lock b/python/poetry.lock
new file mode 100644
index 0000000..14b1e26
--- /dev/null
+++ b/python/poetry.lock
@@ -0,0 +1,331 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
+
+[[package]]
+name = "certifi"
+version = "2023.5.7"
+description = "Python package for providing Mozilla's CA Bundle."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"},
+ {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"},
+]
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+description = "Cross-platform colored terminal text."
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
+files = [
+ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
+ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
+]
+
+[[package]]
+name = "exceptiongroup"
+version = "1.1.1"
+description = "Backport of PEP 654 (exception groups)"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"},
+ {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"},
+]
+
+[package.extras]
+test = ["pytest (>=6)"]
+
+[[package]]
+name = "grpcio"
+version = "1.54.2"
+description = "HTTP/2-based RPC framework"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "grpcio-1.54.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:40e1cbf69d6741b40f750f3cccc64326f927ac6145a9914d33879e586002350c"},
+ {file = "grpcio-1.54.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:2288d76e4d4aa7ef3fe7a73c1c470b66ea68e7969930e746a8cd8eca6ef2a2ea"},
+ {file = "grpcio-1.54.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:c0e3155fc5335ec7b3b70f15230234e529ca3607b20a562b6c75fb1b1218874c"},
+ {file = "grpcio-1.54.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bf88004fe086c786dc56ef8dd6cb49c026833fdd6f42cb853008bce3f907148"},
+ {file = "grpcio-1.54.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2be88c081e33f20630ac3343d8ad9f1125f32987968e9c8c75c051c9800896e8"},
+ {file = "grpcio-1.54.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:33d40954199bddbb6a78f8f6f2b2082660f381cd2583ec860a6c2fa7c8400c08"},
+ {file = "grpcio-1.54.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b52d00d1793d290c81ad6a27058f5224a7d5f527867e5b580742e1bd211afeee"},
+ {file = "grpcio-1.54.2-cp310-cp310-win32.whl", hash = "sha256:881d058c5ccbea7cc2c92085a11947b572498a27ef37d3eef4887f499054dca8"},
+ {file = "grpcio-1.54.2-cp310-cp310-win_amd64.whl", hash = "sha256:0212e2f7fdf7592e4b9d365087da30cb4d71e16a6f213120c89b4f8fb35a3ab3"},
+ {file = "grpcio-1.54.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:1e623e0cf99a0ac114f091b3083a1848dbc64b0b99e181473b5a4a68d4f6f821"},
+ {file = "grpcio-1.54.2-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:66233ccd2a9371158d96e05d082043d47dadb18cbb294dc5accfdafc2e6b02a7"},
+ {file = "grpcio-1.54.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:4cb283f630624ebb16c834e5ac3d7880831b07cbe76cb08ab7a271eeaeb8943e"},
+ {file = "grpcio-1.54.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a1e601ee31ef30a9e2c601d0867e236ac54c922d32ed9f727b70dd5d82600d5"},
+ {file = "grpcio-1.54.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8da84bbc61a4e92af54dc96344f328e5822d574f767e9b08e1602bb5ddc254a"},
+ {file = "grpcio-1.54.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5008964885e8d23313c8e5ea0d44433be9bfd7e24482574e8cc43c02c02fc796"},
+ {file = "grpcio-1.54.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a2f5a1f1080ccdc7cbaf1171b2cf384d852496fe81ddedeb882d42b85727f610"},
+ {file = "grpcio-1.54.2-cp311-cp311-win32.whl", hash = "sha256:b74ae837368cfffeb3f6b498688a123e6b960951be4dec0e869de77e7fa0439e"},
+ {file = "grpcio-1.54.2-cp311-cp311-win_amd64.whl", hash = "sha256:8cdbcbd687e576d48f7886157c95052825ca9948c0ed2afdc0134305067be88b"},
+ {file = "grpcio-1.54.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:782f4f8662a2157c4190d0f99eaaebc602899e84fb1e562a944e5025929e351c"},
+ {file = "grpcio-1.54.2-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:714242ad0afa63a2e6dabd522ae22e1d76e07060b5af2ddda5474ba4f14c2c94"},
+ {file = "grpcio-1.54.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:f900ed4ad7a0f1f05d35f955e0943944d5a75f607a836958c6b8ab2a81730ef2"},
+ {file = "grpcio-1.54.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96a41817d2c763b1d0b32675abeb9179aa2371c72aefdf74b2d2b99a1b92417b"},
+ {file = "grpcio-1.54.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70fcac7b94f4c904152809a050164650ac81c08e62c27aa9f156ac518029ebbe"},
+ {file = "grpcio-1.54.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fd6c6c29717724acf9fc1847c4515d57e4dc12762452457b9cb37461f30a81bb"},
+ {file = "grpcio-1.54.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c2392f5b5d84b71d853918687d806c1aa4308109e5ca158a16e16a6be71041eb"},
+ {file = "grpcio-1.54.2-cp37-cp37m-win_amd64.whl", hash = "sha256:51630c92591d6d3fe488a7c706bd30a61594d144bac7dee20c8e1ce78294f474"},
+ {file = "grpcio-1.54.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:b04202453941a63b36876a7172b45366dc0cde10d5fd7855c0f4a4e673c0357a"},
+ {file = "grpcio-1.54.2-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:89dde0ac72a858a44a2feb8e43dc68c0c66f7857a23f806e81e1b7cc7044c9cf"},
+ {file = "grpcio-1.54.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:09d4bfd84686cd36fd11fd45a0732c7628308d094b14d28ea74a81db0bce2ed3"},
+ {file = "grpcio-1.54.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7fc2b4edb938c8faa4b3c3ea90ca0dd89b7565a049e8e4e11b77e60e4ed2cc05"},
+ {file = "grpcio-1.54.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61f7203e2767800edee7a1e1040aaaf124a35ce0c7fe0883965c6b762defe598"},
+ {file = "grpcio-1.54.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e416c8baf925b5a1aff31f7f5aecc0060b25d50cce3a5a7255dc5cf2f1d4e5eb"},
+ {file = "grpcio-1.54.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dc80c9c6b608bf98066a038e0172013a49cfa9a08d53335aefefda2c64fc68f4"},
+ {file = "grpcio-1.54.2-cp38-cp38-win32.whl", hash = "sha256:8d6192c37a30a115f4663592861f50e130caed33efc4eec24d92ec881c92d771"},
+ {file = "grpcio-1.54.2-cp38-cp38-win_amd64.whl", hash = "sha256:46a057329938b08e5f0e12ea3d7aed3ecb20a0c34c4a324ef34e00cecdb88a12"},
+ {file = "grpcio-1.54.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:2296356b5c9605b73ed6a52660b538787094dae13786ba53080595d52df13a98"},
+ {file = "grpcio-1.54.2-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:c72956972e4b508dd39fdc7646637a791a9665b478e768ffa5f4fe42123d5de1"},
+ {file = "grpcio-1.54.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:9bdbb7624d65dc0ed2ed8e954e79ab1724526f09b1efa88dcd9a1815bf28be5f"},
+ {file = "grpcio-1.54.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c44e1a765b31e175c391f22e8fc73b2a2ece0e5e6ff042743d8109b5d2eff9f"},
+ {file = "grpcio-1.54.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cc928cfe6c360c1df636cf7991ab96f059666ac7b40b75a769410cc6217df9c"},
+ {file = "grpcio-1.54.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a08920fa1a97d4b8ee5db2f31195de4a9def1a91bc003544eb3c9e6b8977960a"},
+ {file = "grpcio-1.54.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4864f99aac207e3e45c5e26c6cbb0ad82917869abc2f156283be86c05286485c"},
+ {file = "grpcio-1.54.2-cp39-cp39-win32.whl", hash = "sha256:b38b3de8cff5bc70f8f9c615f51b48eff7313fc9aca354f09f81b73036e7ddfa"},
+ {file = "grpcio-1.54.2-cp39-cp39-win_amd64.whl", hash = "sha256:be48496b0e00460717225e7680de57c38be1d8629dc09dadcd1b3389d70d942b"},
+ {file = "grpcio-1.54.2.tar.gz", hash = "sha256:50a9f075eeda5097aa9a182bb3877fe1272875e45370368ac0ee16ab9e22d019"},
+]
+
+[package.extras]
+protobuf = ["grpcio-tools (>=1.54.2)"]
+
+[[package]]
+name = "grpcio-tools"
+version = "1.54.2"
+description = "Protobuf code generator for gRPC"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "grpcio-tools-1.54.2.tar.gz", hash = "sha256:e11c2c2aee53f340992e8e4d6a59172cbbbd0193f1351de98c4f810a5041d5ca"},
+ {file = "grpcio_tools-1.54.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:2b96f5f17d3156058be247fd25b062b4768138665694c00b056659618b8fb418"},
+ {file = "grpcio_tools-1.54.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:11939c9a8a39bd4815c7e88cb2fee48e1948775b59dbb06de8fcae5991e84f9e"},
+ {file = "grpcio_tools-1.54.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:129de5579f95d6a55dde185f188b4cbe19d1e2f1471425431d9930c31d300d70"},
+ {file = "grpcio_tools-1.54.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4128c01cd6f5ea8f7c2db405dbfd8582cd967d36e6fa0952565436633b0e591"},
+ {file = "grpcio_tools-1.54.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5c7292dd899ad8fa09a2be96719648cee37b17909fe8c12007e3bff58ebee61"},
+ {file = "grpcio_tools-1.54.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5ef30c2dbc63c1e0a462423ca4f95001814d26ef4fe66208e53fcf220ea3b717"},
+ {file = "grpcio_tools-1.54.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4abfc1892380abe6cef381eab86f9350cbd703bfe5d834095aa66fd91c886b6d"},
+ {file = "grpcio_tools-1.54.2-cp310-cp310-win32.whl", hash = "sha256:9acf443dcf6f68fbea3b7fb519e1716e014db1a561939f5aecc4abda74e4015d"},
+ {file = "grpcio_tools-1.54.2-cp310-cp310-win_amd64.whl", hash = "sha256:21b9d2dee80f3f77e4097252e7f0db89772335a7300b72ab3d2e5c280872b1db"},
+ {file = "grpcio_tools-1.54.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:7b24fbab9e7598518ce4549e066df00aab79c2bf9bedcdde23fb5ef6a3cf532f"},
+ {file = "grpcio_tools-1.54.2-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:7baa210c20f71a242d9ae0e02734628f6948e8bee3bf538647894af427d28800"},
+ {file = "grpcio_tools-1.54.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:e3d0e5188ff8dbaddac2ee44731d36f09c4eccd3eac7328e547862c44f75cacd"},
+ {file = "grpcio_tools-1.54.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27671c68c7e0e3c5ff9967f5500799f65a04e7b153b8ce10243c87c43199039d"},
+ {file = "grpcio_tools-1.54.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f39d8e8806b8857fb473ca6a9c7bd800b0673dfdb7283ff569af0345a222f32c"},
+ {file = "grpcio_tools-1.54.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8e4c5a48f7b2e8798ce381498ee7b9a83c65b87ae66ee5022387394e5eb51771"},
+ {file = "grpcio_tools-1.54.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4f285f8ef3de422717a36bd372239ae778b8cc112ce780ca3c7fe266dadc49fb"},
+ {file = "grpcio_tools-1.54.2-cp311-cp311-win32.whl", hash = "sha256:0f952c8a5c47e9204fe8959f7e9add149e660f6579d67cf65024c32736d34caf"},
+ {file = "grpcio_tools-1.54.2-cp311-cp311-win_amd64.whl", hash = "sha256:3237149beec39e897fd62cef4aa1e1cd9422d7a95661d24bd0a79200b167e730"},
+ {file = "grpcio_tools-1.54.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:0ab1b323905d449298523db5d34fa5bf5fffd645bd872b25598e2f8a01f0ea39"},
+ {file = "grpcio_tools-1.54.2-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:7d7e6e8d62967b3f037f952620cb7381cc39a4bd31790c75fcfba56cc975d70b"},
+ {file = "grpcio_tools-1.54.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:7f4624ef2e76a3a5313c4e61a81be38bcc16b59a68a85d30758b84cd2102b161"},
+ {file = "grpcio_tools-1.54.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e543f457935ba7b763b121f1bf893974393b4d30065042f947f85a8d81081b80"},
+ {file = "grpcio_tools-1.54.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0239b929eb8b3b30b2397eef3b9abb245087754d77c3721e3be43c44796de87d"},
+ {file = "grpcio_tools-1.54.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0de05c7698c655e9a240dc34ae91d6017b93143ac89e5b20046d7ca3bd09c27c"},
+ {file = "grpcio_tools-1.54.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a3ce0b98fb581c471424d2cda45120f57658ed97677c6fec4d6decf5d7c1b976"},
+ {file = "grpcio_tools-1.54.2-cp37-cp37m-win_amd64.whl", hash = "sha256:37393ef90674964175923afe3859fc5a208e1ece565f642b4f76a8c0224a0993"},
+ {file = "grpcio_tools-1.54.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:8e4531267736d88fde1022b36dd42ed8163e3575bcbd12bfed96662872aa93fe"},
+ {file = "grpcio_tools-1.54.2-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:a0b7049814442f918b522d66b1d015286afbeb9e6d141af54bbfafe31710a3c8"},
+ {file = "grpcio_tools-1.54.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:b80585e06c4f0082327eb5c9ad96fbdb2b0e7c14971ea5099fe78c22f4608451"},
+ {file = "grpcio_tools-1.54.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39fd530cfdf58dc05125775cc233b05554d553d27478f14ae5fd8a6306f0cb28"},
+ {file = "grpcio_tools-1.54.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3bb9ec4aea0f2b3006fb002fa59e5c10f92b48fc374619fbffd14d2b0e388c3e"},
+ {file = "grpcio_tools-1.54.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d512de051342a576bb89777476d13c5266d9334cf4badb6468aed9dc8f5bdec1"},
+ {file = "grpcio_tools-1.54.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1b8ee3099c51ce987fa8a08e6b93fc342b10228415dd96b5c0caa0387f636a6f"},
+ {file = "grpcio_tools-1.54.2-cp38-cp38-win32.whl", hash = "sha256:6037f123905dc0141f7c8383ca616ef0195e79cd3b4d82faaee789d4045e891b"},
+ {file = "grpcio_tools-1.54.2-cp38-cp38-win_amd64.whl", hash = "sha256:10dd41862f579d185c60f629b5ee89103e216f63b576079d258d974d980bad87"},
+ {file = "grpcio_tools-1.54.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:f6787d07fdab31a32c433c1ba34883dea6559d8a3fbe08fb93d834ca34136b71"},
+ {file = "grpcio_tools-1.54.2-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:21b1467e31e44429d2a78b50135c9cdbd4b8f6d3b5cd548bc98985d3bdc352d0"},
+ {file = "grpcio_tools-1.54.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:30a49b8b168aced2a4ff40959e6c4383ad6cfd7a20839a47a215e9837eb722dc"},
+ {file = "grpcio_tools-1.54.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8742122782953d2fd038f0a199f047a24e941cc9718b1aac90876dbdb7167739"},
+ {file = "grpcio_tools-1.54.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503ef1351c62fb1d6747eaf74932b609d8fdd4345b3591ef910adef8fa9969d0"},
+ {file = "grpcio_tools-1.54.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:72d15de4c4b6a764a76c4ae69d99c35f7a0751223688c3f7e62dfa95eb4f61be"},
+ {file = "grpcio_tools-1.54.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:df079479fb1b9e488334312e35ebbf30cbf5ecad6c56599f1a961800b33ab7c1"},
+ {file = "grpcio_tools-1.54.2-cp39-cp39-win32.whl", hash = "sha256:49c2846dcc4803476e839d8bd4db8845e928f19130e0ea86121f2d1f43d2b452"},
+ {file = "grpcio_tools-1.54.2-cp39-cp39-win_amd64.whl", hash = "sha256:b82ca472db9c914c44e39a41e9e8bd3ed724523dd7aff5ce37592b8d16920ed9"},
+]
+
+[package.dependencies]
+grpcio = ">=1.54.2"
+protobuf = ">=4.21.6,<5.0dev"
+setuptools = "*"
+
+[[package]]
+name = "importlib-metadata"
+version = "6.6.0"
+description = "Read metadata from Python packages"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "importlib_metadata-6.6.0-py3-none-any.whl", hash = "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed"},
+ {file = "importlib_metadata-6.6.0.tar.gz", hash = "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705"},
+]
+
+[package.dependencies]
+typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
+zipp = ">=0.5"
+
+[package.extras]
+docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
+perf = ["ipython"]
+testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"]
+
+[[package]]
+name = "iniconfig"
+version = "2.0.0"
+description = "brain-dead simple config-ini parsing"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
+ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
+]
+
+[[package]]
+name = "packaging"
+version = "23.1"
+description = "Core utilities for Python packages"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"},
+ {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"},
+]
+
+[[package]]
+name = "pluggy"
+version = "1.0.0"
+description = "plugin and hook calling mechanisms for python"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
+]
+
+[package.dependencies]
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
+
+[package.extras]
+dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
+
+[[package]]
+name = "protobuf"
+version = "4.23.2"
+description = ""
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "protobuf-4.23.2-cp310-abi3-win32.whl", hash = "sha256:384dd44cb4c43f2ccddd3645389a23ae61aeb8cfa15ca3a0f60e7c3ea09b28b3"},
+ {file = "protobuf-4.23.2-cp310-abi3-win_amd64.whl", hash = "sha256:09310bce43353b46d73ba7e3bca78273b9bc50349509b9698e64d288c6372c2a"},
+ {file = "protobuf-4.23.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:b2cfab63a230b39ae603834718db74ac11e52bccaaf19bf20f5cce1a84cf76df"},
+ {file = "protobuf-4.23.2-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:c52cfcbfba8eb791255edd675c1fe6056f723bf832fa67f0442218f8817c076e"},
+ {file = "protobuf-4.23.2-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:86df87016d290143c7ce3be3ad52d055714ebaebb57cc659c387e76cfacd81aa"},
+ {file = "protobuf-4.23.2-cp37-cp37m-win32.whl", hash = "sha256:281342ea5eb631c86697e1e048cb7e73b8a4e85f3299a128c116f05f5c668f8f"},
+ {file = "protobuf-4.23.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ce744938406de1e64b91410f473736e815f28c3b71201302612a68bf01517fea"},
+ {file = "protobuf-4.23.2-cp38-cp38-win32.whl", hash = "sha256:6c081863c379bb1741be8f8193e893511312b1d7329b4a75445d1ea9955be69e"},
+ {file = "protobuf-4.23.2-cp38-cp38-win_amd64.whl", hash = "sha256:25e3370eda26469b58b602e29dff069cfaae8eaa0ef4550039cc5ef8dc004511"},
+ {file = "protobuf-4.23.2-cp39-cp39-win32.whl", hash = "sha256:efabbbbac1ab519a514579ba9ec52f006c28ae19d97915951f69fa70da2c9e91"},
+ {file = "protobuf-4.23.2-cp39-cp39-win_amd64.whl", hash = "sha256:54a533b971288af3b9926e53850c7eb186886c0c84e61daa8444385a4720297f"},
+ {file = "protobuf-4.23.2-py3-none-any.whl", hash = "sha256:8da6070310d634c99c0db7df48f10da495cc283fd9e9234877f0cd182d43ab7f"},
+ {file = "protobuf-4.23.2.tar.gz", hash = "sha256:20874e7ca4436f683b64ebdbee2129a5a2c301579a67d1a7dda2cdf62fb7f5f7"},
+]
+
+[[package]]
+name = "pytest"
+version = "7.3.1"
+description = "pytest: simple powerful testing with Python"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pytest-7.3.1-py3-none-any.whl", hash = "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362"},
+ {file = "pytest-7.3.1.tar.gz", hash = "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
+iniconfig = "*"
+packaging = "*"
+pluggy = ">=0.12,<2.0"
+tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""}
+
+[package.extras]
+testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"]
+
+[[package]]
+name = "setuptools"
+version = "67.8.0"
+description = "Easily download, build, install, upgrade, and uninstall Python packages"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "setuptools-67.8.0-py3-none-any.whl", hash = "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f"},
+ {file = "setuptools-67.8.0.tar.gz", hash = "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102"},
+]
+
+[package.extras]
+docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
+testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
+testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
+
+[[package]]
+name = "tomli"
+version = "2.0.1"
+description = "A lil' TOML parser"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
+ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
+]
+
+[[package]]
+name = "typing-extensions"
+version = "4.6.2"
+description = "Backported and Experimental Type Hints for Python 3.7+"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "typing_extensions-4.6.2-py3-none-any.whl", hash = "sha256:3a8b36f13dd5fdc5d1b16fe317f5668545de77fa0b8e02006381fd49d731ab98"},
+ {file = "typing_extensions-4.6.2.tar.gz", hash = "sha256:06006244c70ac8ee83fa8282cb188f697b8db25bc8b4df07be1873c43897060c"},
+]
+
+[[package]]
+name = "zipp"
+version = "3.15.0"
+description = "Backport of pathlib-compatible object wrapper for zip files"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"},
+ {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"},
+]
+
+[package.extras]
+docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
+testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"]
+
+[metadata]
+lock-version = "2.0"
+python-versions = "^3.7"
+content-hash = "8452cc04f16254585b86b05703ed525c20f7c471f180da580e95f26324df7f55"
diff --git a/python/protocol/admin_pb2.py b/python/protocol/admin_pb2.py
deleted file mode 100644
index 20f5ab0..0000000
--- a/python/protocol/admin_pb2.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler. DO NOT EDIT!
-# source: admin.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import builder as _builder
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x61\x64min.proto\x12\x12\x61pache.rocketmq.v2\"\x95\x01\n\x15\x43hangeLogLevelRequest\x12>\n\x05level\x18\x01 \x01(\x0e\x32/.apache.rocketmq.v2.ChangeLogLevelRequest.Level\"<\n\x05Level\x12\t\n\x05TRACE\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x08\n\x04WARN\x10\x03\x12\t\n\x05\x45RROR\x10\x04\"(\n\x16\x43hangeLogLevelResponse\x12\x0e\n\x06remark\x18\x01 \x01(\t2r\n\x05\x41\x64min\x12i\n\x0e\x43hangeLogLevel\x12).apache.rocketmq.v2.ChangeLogLevelRequest\x1a*.apache.rocketmq.v2.ChangeLogLevelResponse\"\x00\x42=\n\x12\x61pache.rocketmq.v2B\x07MQAdminP\x01\xa0\x01\x01\xd8\x01\x01\xf8\x01\x01\xaa\x02\x12\x41pache.Rocketmq.V2b\x06proto3')
-
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'admin_pb2', globals())
-if _descriptor._USE_C_DESCRIPTORS == False:
-
- DESCRIPTOR._options = None
- DESCRIPTOR._serialized_options = b'\n\022apache.rocketmq.v2B\007MQAdminP\001\240\001\001\330\001\001\370\001\001\252\002\022Apache.Rocketmq.V2'
- _CHANGELOGLEVELREQUEST._serialized_start=36
- _CHANGELOGLEVELREQUEST._serialized_end=185
- _CHANGELOGLEVELREQUEST_LEVEL._serialized_start=125
- _CHANGELOGLEVELREQUEST_LEVEL._serialized_end=185
- _CHANGELOGLEVELRESPONSE._serialized_start=187
- _CHANGELOGLEVELRESPONSE._serialized_end=227
- _ADMIN._serialized_start=229
- _ADMIN._serialized_end=343
-# @@protoc_insertion_point(module_scope)
diff --git a/python/protocol/definition_pb2.py b/python/protocol/definition_pb2.py
deleted file mode 100644
index ef2a38f..0000000
--- a/python/protocol/definition_pb2.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler. DO NOT EDIT!
-# source: definition.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import builder as _builder
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
-from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x64\x65\x66inition.proto\x12\x12\x61pache.rocketmq.v2\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\"T\n\x10\x46ilterExpression\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x1e.apache.rocketmq.v2.FilterType\x12\x12\n\nexpression\x18\x02 \x01(\t\"\xbb\x01\n\x0bRetryPolicy\x12\x14\n\x0cmax_attempts\x18\x01 \x01(\x05\x12\x45\n\x13\x65xponential_backoff\x18\x02 \x01(\x0b\x32&.apache.rocketmq.v2.ExponentialBackoffH\x00\x12\x43\n\x12\x63ustomized_backoff\x18\x03 \x01(\x0b\x32%.apache.rocketmq.v2.CustomizedBackoffH\x00\x42\n\n\x08strategy\"|\n\x12\x45xponentialBackoff\x12*\n\x07initial\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\x12&\n\x03max\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x12\n\nmultiplier\x18\x03 \x01(\x02\"<\n\x11\x43ustomizedBackoff\x12\'\n\x04next\x18\x01 \x03(\x0b\x32\x19.google.protobuf.Duration\"4\n\x08Resource\x12\x1a\n\x12resource_namespace\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"z\n\x11SubscriptionEntry\x12+\n\x05topic\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x38\n\nexpression\x18\x02 \x01(\x0b\x32$.apache.rocketmq.v2.FilterExpression\"%\n\x07\x41\x64\x64ress\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\"n\n\tEndpoints\x12\x31\n\x06scheme\x18\x01 \x01(\x0e\x32!.apache.rocketmq.v2.AddressScheme\x12.\n\taddresses\x18\x02 \x03(\x0b\x32\x1b.apache.rocketmq.v2.Address\"T\n\x06\x42roker\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x05\x12\x30\n\tendpoints\x18\x03 \x01(\x0b\x32\x1d.apache.rocketmq.v2.Endpoints\"\xe6\x01\n\x0cMessageQueue\x12+\n\x05topic\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\n\n\x02id\x18\x02 \x01(\x05\x12\x32\n\npermission\x18\x03 \x01(\x0e\x32\x1e.apache.rocketmq.v2.Permission\x12*\n\x06\x62roker\x18\x04 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Broker\x12=\n\x14\x61\x63\x63\x65pt_message_types\x18\x05 \x03(\x0e\x32\x1f.apache.rocketmq.v2.MessageType\"H\n\x06\x44igest\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x1e.apache.rocketmq.v2.DigestType\x12\x10\n\x08\x63hecksum\x18\x02 \x01(\t\"\xb4\x07\n\x10SystemProperties\x12\x10\n\x03tag\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12\x12\n\nmessage_id\x18\x03 \x01(\t\x12/\n\x0b\x62ody_digest\x18\x04 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Digest\x12\x33\n\rbody_encoding\x18\x05 \x01(\x0e\x32\x1c.apache.rocketmq.v2.Encoding\x12\x35\n\x0cmessage_type\x18\x06 \x01(\x0e\x32\x1f.apache.rocketmq.v2.MessageType\x12\x32\n\x0e\x62orn_timestamp\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x11\n\tborn_host\x18\x08 \x01(\t\x12\x38\n\x0fstore_timestamp\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x12\x12\n\nstore_host\x18\n \x01(\t\x12;\n\x12\x64\x65livery_timestamp\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02\x88\x01\x01\x12\x1b\n\x0ereceipt_handle\x18\x0c \x01(\tH\x03\x88\x01\x01\x12\x10\n\x08queue_id\x18\r \x01(\x05\x12\x19\n\x0cqueue_offset\x18\x0e \x01(\x03H\x04\x88\x01\x01\x12:\n\x12invisible_duration\x18\x0f \x01(\x0b\x32\x19.google.protobuf.DurationH\x05\x88\x01\x01\x12\x1d\n\x10\x64\x65livery_attempt\x18\x10 \x01(\x05H\x06\x88\x01\x01\x12\x1a\n\rmessage_group\x18\x11 \x01(\tH\x07\x88\x01\x01\x12\x1a\n\rtrace_context\x18\x12 \x01(\tH\x08\x88\x01\x01\x12N\n&orphaned_transaction_recovery_duration\x18\x13 \x01(\x0b\x32\x19.google.protobuf.DurationH\t\x88\x01\x01\x42\x06\n\x04_tagB\x12\n\x10_store_timestampB\x15\n\x13_delivery_timestampB\x11\n\x0f_receipt_handleB\x0f\n\r_queue_offsetB\x15\n\x13_invisible_durationB\x13\n\x11_delivery_attemptB\x10\n\x0e_message_groupB\x10\n\x0e_trace_contextB)\n\'_orphaned_transaction_recovery_duration\"\x86\x02\n\x07Message\x12+\n\x05topic\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12H\n\x0fuser_properties\x18\x02 \x03(\x0b\x32/.apache.rocketmq.v2.Message.UserPropertiesEntry\x12?\n\x11system_properties\x18\x03 \x01(\x0b\x32$.apache.rocketmq.v2.SystemProperties\x12\x0c\n\x04\x62ody\x18\x04 \x01(\x0c\x1a\x35\n\x13UserPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"E\n\nAssignment\x12\x37\n\rmessage_queue\x18\x01 \x01(\x0b\x32 .apache.rocketmq.v2.MessageQueue\"A\n\x06Status\x12&\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x18.apache.rocketmq.v2.Code\x12\x0f\n\x07message\x18\x02 \x01(\t\"i\n\x02UA\x12.\n\x08language\x18\x01 \x01(\x0e\x32\x1c.apache.rocketmq.v2.Language\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x10\n\x08platform\x18\x03 \x01(\t\x12\x10\n\x08hostname\x18\x04 \x01(\t*Y\n\x15TransactionResolution\x12&\n\"TRANSACTION_RESOLUTION_UNSPECIFIED\x10\x00\x12\n\n\x06\x43OMMIT\x10\x01\x12\x0c\n\x08ROLLBACK\x10\x02*W\n\x11TransactionSource\x12\x16\n\x12SOURCE_UNSPECIFIED\x10\x00\x12\x11\n\rSOURCE_CLIENT\x10\x01\x12\x17\n\x13SOURCE_SERVER_CHECK\x10\x02*W\n\nPermission\x12\x1a\n\x16PERMISSION_UNSPECIFIED\x10\x00\x12\x08\n\x04NONE\x10\x01\x12\x08\n\x04READ\x10\x02\x12\t\n\x05WRITE\x10\x03\x12\x0e\n\nREAD_WRITE\x10\x04*;\n\nFilterType\x12\x1b\n\x17\x46ILTER_TYPE_UNSPECIFIED\x10\x00\x12\x07\n\x03TAG\x10\x01\x12\x07\n\x03SQL\x10\x02*T\n\rAddressScheme\x12\x1e\n\x1a\x41\x44\x44RESS_SCHEME_UNSPECIFIED\x10\x00\x12\x08\n\x04IPv4\x10\x01\x12\x08\n\x04IPv6\x10\x02\x12\x0f\n\x0b\x44OMAIN_NAME\x10\x03*]\n\x0bMessageType\x12\x1c\n\x18MESSAGE_TYPE_UNSPECIFIED\x10\x00\x12\n\n\x06NORMAL\x10\x01\x12\x08\n\x04\x46IFO\x10\x02\x12\t\n\x05\x44\x45LAY\x10\x03\x12\x0f\n\x0bTRANSACTION\x10\x04*G\n\nDigestType\x12\x1b\n\x17\x44IGEST_TYPE_UNSPECIFIED\x10\x00\x12\t\n\x05\x43RC32\x10\x01\x12\x07\n\x03MD5\x10\x02\x12\x08\n\x04SHA1\x10\x03*_\n\nClientType\x12\x1b\n\x17\x43LIENT_TYPE_UNSPECIFIED\x10\x00\x12\x0c\n\x08PRODUCER\x10\x01\x12\x11\n\rPUSH_CONSUMER\x10\x02\x12\x13\n\x0fSIMPLE_CONSUMER\x10\x03*<\n\x08\x45ncoding\x12\x18\n\x14\x45NCODING_UNSPECIFIED\x10\x00\x12\x0c\n\x08IDENTITY\x10\x01\x12\x08\n\x04GZIP\x10\x02*\xe2\t\n\x04\x43ode\x12\x14\n\x10\x43ODE_UNSPECIFIED\x10\x00\x12\x08\n\x02OK\x10\xa0\x9c\x01\x12\x16\n\x10MULTIPLE_RESULTS\x10\xb0\xea\x01\x12\x11\n\x0b\x42\x41\x44_REQUEST\x10\xc0\xb8\x02\x12\x1a\n\x14ILLEGAL_ACCESS_POINT\x10\xc1\xb8\x02\x12\x13\n\rILLEGAL_TOPIC\x10\xc2\xb8\x02\x12\x1c\n\x16ILLEGAL_CONSUMER_GROUP\x10\xc3\xb8\x02\x12\x19\n\x13ILLEGAL_MESSAGE_TAG\x10\xc4\xb8\x02\x12\x19\n\x13ILLEGAL_MESSAGE_KEY\x10\xc5\xb8\x02\x12\x1b\n\x15ILLEGAL_MESSAGE_GROUP\x10\xc6\xb8\x02\x12\"\n\x1cILLEGAL_MESSAGE_PROPERTY_KEY\x10\xc7\xb8\x02\x12\x1c\n\x16INVALID_TRANSACTION_ID\x10\xc8\xb8\x02\x12\x18\n\x12ILLEGAL_MESSAGE_ID\x10\xc9\xb8\x02\x12\x1f\n\x19ILLEGAL_FILTER_EXPRESSION\x10\xca\xb8\x02\x12\x1c\n\x16ILLEGAL_INVISIBLE_TIME\x10\xcb\xb8\x02\x12\x1b\n\x15ILLEGAL_DELIVERY_TIME\x10\xcc\xb8\x02\x12\x1c\n\x16INVALID_RECEIPT_HANDLE\x10\xcd\xb8\x02\x12)\n#MESSAGE_PROPERTY_CONFLICT_WITH_TYPE\x10\xce\xb8\x02\x12\x1e\n\x18UNRECOGNIZED_CLIENT_TYPE\x10\xcf\xb8\x02\x12\x17\n\x11MESSAGE_CORRUPTED\x10\xd0\xb8\x02\x12\x18\n\x12\x43LIENT_ID_REQUIRED\x10\xd1\xb8\x02\x12\x12\n\x0cUNAUTHORIZED\x10\xa4\xb9\x02\x12\x16\n\x10PAYMENT_REQUIRED\x10\x88\xba\x02\x12\x0f\n\tFORBIDDEN\x10\xec\xba\x02\x12\x0f\n\tNOT_FOUND\x10\xd0\xbb\x02\x12\x17\n\x11MESSAGE_NOT_FOUND\x10\xd1\xbb\x02\x12\x15\n\x0fTOPIC_NOT_FOUND\x10\xd2\xbb\x02\x12\x1e\n\x18\x43ONSUMER_GROUP_NOT_FOUND\x10\xd3\xbb\x02\x12\x15\n\x0fREQUEST_TIMEOUT\x10\xe0\xbe\x02\x12\x17\n\x11PAYLOAD_TOO_LARGE\x10\xd4\xc2\x02\x12\x1c\n\x16MESSAGE_BODY_TOO_LARGE\x10\xd5\xc2\x02\x12\x19\n\x13PRECONDITION_FAILED\x10\xb0\xce\x02\x12\x17\n\x11TOO_MANY_REQUESTS\x10\x94\xcf\x02\x12%\n\x1fREQUEST_HEADER_FIELDS_TOO_LARGE\x10\xdc\xd0\x02\x12\"\n\x1cMESSAGE_PROPERTIES_TOO_LARGE\x10\xdd\xd0\x02\x12\x14\n\x0eINTERNAL_ERROR\x10\xd0\x86\x03\x12\x1b\n\x15INTERNAL_SERVER_ERROR\x10\xd1\x86\x03\x12\x16\n\x10HA_NOT_AVAILABLE\x10\xd2\x86\x03\x12\x15\n\x0fNOT_IMPLEMENTED\x10\xb4\x87\x03\x12\x13\n\rPROXY_TIMEOUT\x10\xe0\x89\x03\x12 \n\x1aMASTER_PERSISTENCE_TIMEOUT\x10\xe1\x89\x03\x12\x1f\n\x19SLAVE_PERSISTENCE_TIMEOUT\x10\xe2\x89\x03\x12\x11\n\x0bUNSUPPORTED\x10\xc4\x8a\x03\x12\x19\n\x13VERSION_UNSUPPORTED\x10\xc5\x8a\x03\x12%\n\x1fVERIFY_FIFO_MESSAGE_UNSUPPORTED\x10\xc6\x8a\x03\x12\x1f\n\x19\x46\x41ILED_TO_CONSUME_MESSAGE\x10\xe0\xd4\x03*Z\n\x08Language\x12\x18\n\x14LANGUAGE_UNSPECIFIED\x10\x00\x12\x08\n\x04JAVA\x10\x01\x12\x07\n\x03\x43PP\x10\x02\x12\x0b\n\x07\x44OT_NET\x10\x03\x12\n\n\x06GOLANG\x10\x04\x12\x08\n\x04RUST\x10\x05\x42;\n\x12\x61pache.rocketmq.v2B\x08MQDomainP\x01\xa0\x01\x01\xd8\x01\x01\xaa\x02\x12\x41pache.Rocketmq.V2b\x06proto3')
-
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'definition_pb2', globals())
-if _descriptor._USE_C_DESCRIPTORS == False:
-
- DESCRIPTOR._options = None
- DESCRIPTOR._serialized_options = b'\n\022apache.rocketmq.v2B\010MQDomainP\001\240\001\001\330\001\001\252\002\022Apache.Rocketmq.V2'
- _MESSAGE_USERPROPERTIESENTRY._options = None
- _MESSAGE_USERPROPERTIESENTRY._serialized_options = b'8\001'
- _TRANSACTIONRESOLUTION._serialized_start=2752
- _TRANSACTIONRESOLUTION._serialized_end=2841
- _TRANSACTIONSOURCE._serialized_start=2843
- _TRANSACTIONSOURCE._serialized_end=2930
- _PERMISSION._serialized_start=2932
- _PERMISSION._serialized_end=3019
- _FILTERTYPE._serialized_start=3021
- _FILTERTYPE._serialized_end=3080
- _ADDRESSSCHEME._serialized_start=3082
- _ADDRESSSCHEME._serialized_end=3166
- _MESSAGETYPE._serialized_start=3168
- _MESSAGETYPE._serialized_end=3261
- _DIGESTTYPE._serialized_start=3263
- _DIGESTTYPE._serialized_end=3334
- _CLIENTTYPE._serialized_start=3336
- _CLIENTTYPE._serialized_end=3431
- _ENCODING._serialized_start=3433
- _ENCODING._serialized_end=3493
- _CODE._serialized_start=3496
- _CODE._serialized_end=4746
- _LANGUAGE._serialized_start=4748
- _LANGUAGE._serialized_end=4838
- _FILTEREXPRESSION._serialized_start=105
- _FILTEREXPRESSION._serialized_end=189
- _RETRYPOLICY._serialized_start=192
- _RETRYPOLICY._serialized_end=379
- _EXPONENTIALBACKOFF._serialized_start=381
- _EXPONENTIALBACKOFF._serialized_end=505
- _CUSTOMIZEDBACKOFF._serialized_start=507
- _CUSTOMIZEDBACKOFF._serialized_end=567
- _RESOURCE._serialized_start=569
- _RESOURCE._serialized_end=621
- _SUBSCRIPTIONENTRY._serialized_start=623
- _SUBSCRIPTIONENTRY._serialized_end=745
- _ADDRESS._serialized_start=747
- _ADDRESS._serialized_end=784
- _ENDPOINTS._serialized_start=786
- _ENDPOINTS._serialized_end=896
- _BROKER._serialized_start=898
- _BROKER._serialized_end=982
- _MESSAGEQUEUE._serialized_start=985
- _MESSAGEQUEUE._serialized_end=1215
- _DIGEST._serialized_start=1217
- _DIGEST._serialized_end=1289
- _SYSTEMPROPERTIES._serialized_start=1292
- _SYSTEMPROPERTIES._serialized_end=2240
- _MESSAGE._serialized_start=2243
- _MESSAGE._serialized_end=2505
- _MESSAGE_USERPROPERTIESENTRY._serialized_start=2452
- _MESSAGE_USERPROPERTIESENTRY._serialized_end=2505
- _ASSIGNMENT._serialized_start=2507
- _ASSIGNMENT._serialized_end=2576
- _STATUS._serialized_start=2578
- _STATUS._serialized_end=2643
- _UA._serialized_start=2645
- _UA._serialized_end=2750
-# @@protoc_insertion_point(module_scope)
diff --git a/python/protocol/service_pb2.py b/python/protocol/service_pb2.py
deleted file mode 100644
index 3b5ee27..0000000
--- a/python/protocol/service_pb2.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler. DO NOT EDIT!
-# source: service.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import builder as _builder
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
-from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
-import definition_pb2 as definition__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rservice.proto\x12\x12\x61pache.rocketmq.v2\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x10\x64\x65\x66inition.proto\"r\n\x11QueryRouteRequest\x12+\n\x05topic\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x30\n\tendpoints\x18\x02 \x01(\x0b\x32\x1d.apache.rocketmq.v2.Endpoints\"z\n\x12QueryRouteResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\x12\x38\n\x0emessage_queues\x18\x02 \x03(\x0b\x32 .apache.rocketmq.v2.MessageQueue\"C\n\x12SendMessageRequest\x12-\n\x08messages\x18\x01 \x03(\x0b\x32\x1b.apache.rocketmq.v2.Message\"y\n\x0fSendResultEntry\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x16\n\x0etransaction_id\x18\x03 \x01(\t\x12\x0e\n\x06offset\x18\x04 \x01(\x03\"w\n\x13SendMessageResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\x12\x34\n\x07\x65ntries\x18\x02 \x03(\x0b\x32#.apache.rocketmq.v2.SendResultEntry\"\xa4\x01\n\x16QueryAssignmentRequest\x12+\n\x05topic\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12+\n\x05group\x18\x02 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x30\n\tendpoints\x18\x03 \x01(\x0b\x32\x1d.apache.rocketmq.v2.Endpoints\"z\n\x17QueryAssignmentResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\x12\x33\n\x0b\x61ssignments\x18\x02 \x03(\x0b\x32\x1e.apache.rocketmq.v2.Assignment\"\xb9\x02\n\x15ReceiveMessageRequest\x12+\n\x05group\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x37\n\rmessage_queue\x18\x02 \x01(\x0b\x32 .apache.rocketmq.v2.MessageQueue\x12?\n\x11\x66ilter_expression\x18\x03 \x01(\x0b\x32$.apache.rocketmq.v2.FilterExpression\x12\x12\n\nbatch_size\x18\x04 \x01(\x05\x12:\n\x12invisible_duration\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00\x88\x01\x01\x12\x12\n\nauto_renew\x18\x06 \x01(\x08\x42\x15\n\x13_invisible_duration\"\xbb\x01\n\x16ReceiveMessageResponse\x12,\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.StatusH\x00\x12.\n\x07message\x18\x02 \x01(\x0b\x32\x1b.apache.rocketmq.v2.MessageH\x00\x12\x38\n\x12\x64\x65livery_timestamp\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x42\t\n\x07\x63ontent\"=\n\x0f\x41\x63kMessageEntry\x12\x12\n\nmessage_id\x18\x01 \x01(\t\x12\x16\n\x0ereceipt_handle\x18\x02 \x01(\t\"\xa3\x01\n\x11\x41\x63kMessageRequest\x12+\n\x05group\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12+\n\x05topic\x18\x02 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x34\n\x07\x65ntries\x18\x03 \x03(\x0b\x32#.apache.rocketmq.v2.AckMessageEntry\"o\n\x15\x41\x63kMessageResultEntry\x12\x12\n\nmessage_id\x18\x01 \x01(\t\x12\x16\n\x0ereceipt_handle\x18\x02 \x01(\t\x12*\n\x06status\x18\x03 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\"|\n\x12\x41\x63kMessageResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\x12:\n\x07\x65ntries\x18\x02 \x03(\x0b\x32).apache.rocketmq.v2.AckMessageResultEntry\"\xe7\x01\n&ForwardMessageToDeadLetterQueueRequest\x12+\n\x05group\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12+\n\x05topic\x18\x02 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x16\n\x0ereceipt_handle\x18\x03 \x01(\t\x12\x12\n\nmessage_id\x18\x04 \x01(\t\x12\x18\n\x10\x64\x65livery_attempt\x18\x05 \x01(\x05\x12\x1d\n\x15max_delivery_attempts\x18\x06 \x01(\x05\"U\n\'ForwardMessageToDeadLetterQueueResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\"\x83\x01\n\x10HeartbeatRequest\x12\x30\n\x05group\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.ResourceH\x00\x88\x01\x01\x12\x33\n\x0b\x63lient_type\x18\x02 \x01(\x0e\x32\x1e.apache.rocketmq.v2.ClientTypeB\x08\n\x06_group\"?\n\x11HeartbeatResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\"\xfd\x01\n\x15\x45ndTransactionRequest\x12+\n\x05topic\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x16\n\x0etransaction_id\x18\x03 \x01(\t\x12=\n\nresolution\x18\x04 \x01(\x0e\x32).apache.rocketmq.v2.TransactionResolution\x12\x35\n\x06source\x18\x05 \x01(\x0e\x32%.apache.rocketmq.v2.TransactionSource\x12\x15\n\rtrace_context\x18\x06 \x01(\t\"D\n\x16\x45ndTransactionResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\"-\n\x1cPrintThreadStackTraceCommand\x12\r\n\x05nonce\x18\x01 \x01(\t\"Y\n\x10ThreadStackTrace\x12\r\n\x05nonce\x18\x01 \x01(\t\x12\x1f\n\x12thread_stack_trace\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x15\n\x13_thread_stack_trace\"S\n\x14VerifyMessageCommand\x12\r\n\x05nonce\x18\x01 \x01(\t\x12,\n\x07message\x18\x02 \x01(\x0b\x32\x1b.apache.rocketmq.v2.Message\"$\n\x13VerifyMessageResult\x12\r\n\x05nonce\x18\x01 \x01(\t\"i\n!RecoverOrphanedTransactionCommand\x12,\n\x07message\x18\x01 \x01(\x0b\x32\x1b.apache.rocketmq.v2.Message\x12\x16\n\x0etransaction_id\x18\x02 \x01(\t\"p\n\nPublishing\x12,\n\x06topics\x18\x01 \x03(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x15\n\rmax_body_size\x18\x02 \x01(\x05\x12\x1d\n\x15validate_message_type\x18\x03 \x01(\x08\"\xb3\x02\n\x0cSubscription\x12\x30\n\x05group\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.ResourceH\x00\x88\x01\x01\x12<\n\rsubscriptions\x18\x02 \x03(\x0b\x32%.apache.rocketmq.v2.SubscriptionEntry\x12\x11\n\x04\x66ifo\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x1f\n\x12receive_batch_size\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12<\n\x14long_polling_timeout\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationH\x03\x88\x01\x01\x42\x08\n\x06_groupB\x07\n\x05_fifoB\x15\n\x13_receive_batch_sizeB\x17\n\x15_long_polling_timeout\"Y\n\x06Metric\x12\n\n\x02on\x18\x01 \x01(\x08\x12\x35\n\tendpoints\x18\x02 \x01(\x0b\x32\x1d.apache.rocketmq.v2.EndpointsH\x00\x88\x01\x01\x42\x0c\n\n_endpoints\"\x90\x04\n\x08Settings\x12\x38\n\x0b\x63lient_type\x18\x01 \x01(\x0e\x32\x1e.apache.rocketmq.v2.ClientTypeH\x01\x88\x01\x01\x12\x38\n\x0c\x61\x63\x63\x65ss_point\x18\x02 \x01(\x0b\x32\x1d.apache.rocketmq.v2.EndpointsH\x02\x88\x01\x01\x12<\n\x0e\x62\x61\x63koff_policy\x18\x03 \x01(\x0b\x32\x1f.apache.rocketmq.v2.RetryPolicyH\x03\x88\x01\x01\x12\x37\n\x0frequest_timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x04\x88\x01\x01\x12\x34\n\npublishing\x18\x05 \x01(\x0b\x32\x1e.apache.rocketmq.v2.PublishingH\x00\x12\x38\n\x0csubscription\x18\x06 \x01(\x0b\x32 .apache.rocketmq.v2.SubscriptionH\x00\x12*\n\nuser_agent\x18\x07 \x01(\x0b\x32\x16.apache.rocketmq.v2.UA\x12*\n\x06metric\x18\x08 \x01(\x0b\x32\x1a.apache.rocketmq.v2.MetricB\t\n\x07pub_subB\x0e\n\x0c_client_typeB\x0f\n\r_access_pointB\x11\n\x0f_backoff_policyB\x12\n\x10_request_timeout\"\xaa\x04\n\x10TelemetryCommand\x12/\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.StatusH\x01\x88\x01\x01\x12\x30\n\x08settings\x18\x02 \x01(\x0b\x32\x1c.apache.rocketmq.v2.SettingsH\x00\x12\x42\n\x12thread_stack_trace\x18\x03 \x01(\x0b\x32$.apache.rocketmq.v2.ThreadStackTraceH\x00\x12H\n\x15verify_message_result\x18\x04 \x01(\x0b\x32\'.apache.rocketmq.v2.VerifyMessageResultH\x00\x12\x65\n$recover_orphaned_transaction_command\x18\x05 \x01(\x0b\x32\x35.apache.rocketmq.v2.RecoverOrphanedTransactionCommandH\x00\x12\\\n print_thread_stack_trace_command\x18\x06 \x01(\x0b\x32\x30.apache.rocketmq.v2.PrintThreadStackTraceCommandH\x00\x12J\n\x16verify_message_command\x18\x07 \x01(\x0b\x32(.apache.rocketmq.v2.VerifyMessageCommandH\x00\x42\t\n\x07\x63ommandB\t\n\x07_status\"\\\n\x1eNotifyClientTerminationRequest\x12\x30\n\x05group\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.ResourceH\x00\x88\x01\x01\x42\x08\n\x06_group\"M\n\x1fNotifyClientTerminationResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\"\xdd\x01\n\x1e\x43hangeInvisibleDurationRequest\x12+\n\x05group\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12+\n\x05topic\x18\x02 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x16\n\x0ereceipt_handle\x18\x03 \x01(\t\x12\x35\n\x12invisible_duration\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x12\n\nmessage_id\x18\x05 \x01(\t\"e\n\x1f\x43hangeInvisibleDurationResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\x12\x16\n\x0ereceipt_handle\x18\x02 \x01(\t2\xe0\t\n\x10MessagingService\x12]\n\nQueryRoute\x12%.apache.rocketmq.v2.QueryRouteRequest\x1a&.apache.rocketmq.v2.QueryRouteResponse\"\x00\x12Z\n\tHeartbeat\x12$.apache.rocketmq.v2.HeartbeatRequest\x1a%.apache.rocketmq.v2.HeartbeatResponse\"\x00\x12`\n\x0bSendMessage\x12&.apache.rocketmq.v2.SendMessageRequest\x1a\'.apache.rocketmq.v2.SendMessageResponse\"\x00\x12l\n\x0fQueryAssignment\x12*.apache.rocketmq.v2.QueryAssignmentRequest\x1a+.apache.rocketmq.v2.QueryAssignmentResponse\"\x00\x12k\n\x0eReceiveMessage\x12).apache.rocketmq.v2.ReceiveMessageRequest\x1a*.apache.rocketmq.v2.ReceiveMessageResponse\"\x00\x30\x01\x12]\n\nAckMessage\x12%.apache.rocketmq.v2.AckMessageRequest\x1a&.apache.rocketmq.v2.AckMessageResponse\"\x00\x12\x9c\x01\n\x1f\x46orwardMessageToDeadLetterQueue\x12:.apache.rocketmq.v2.ForwardMessageToDeadLetterQueueRequest\x1a;.apache.rocketmq.v2.ForwardMessageToDeadLetterQueueResponse\"\x00\x12i\n\x0e\x45ndTransaction\x12).apache.rocketmq.v2.EndTransactionRequest\x1a*.apache.rocketmq.v2.EndTransactionResponse\"\x00\x12]\n\tTelemetry\x12$.apache.rocketmq.v2.TelemetryCommand\x1a$.apache.rocketmq.v2.TelemetryCommand\"\x00(\x01\x30\x01\x12\x84\x01\n\x17NotifyClientTermination\x12\x32.apache.rocketmq.v2.NotifyClientTerminationRequest\x1a\x33.apache.rocketmq.v2.NotifyClientTerminationResponse\"\x00\x12\x84\x01\n\x17\x43hangeInvisibleDuration\x12\x32.apache.rocketmq.v2.ChangeInvisibleDurationRequest\x1a\x33.apache.rocketmq.v2.ChangeInvisibleDurationResponse\"\x00\x42<\n\x12\x61pache.rocketmq.v2B\tMQServiceP\x01\xa0\x01\x01\xd8\x01\x01\xaa\x02\x12\x41pache.Rocketmq.V2b\x06proto3')
-
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'service_pb2', globals())
-if _descriptor._USE_C_DESCRIPTORS == False:
-
- DESCRIPTOR._options = None
- DESCRIPTOR._serialized_options = b'\n\022apache.rocketmq.v2B\tMQServiceP\001\240\001\001\330\001\001\252\002\022Apache.Rocketmq.V2'
- _QUERYROUTEREQUEST._serialized_start=120
- _QUERYROUTEREQUEST._serialized_end=234
- _QUERYROUTERESPONSE._serialized_start=236
- _QUERYROUTERESPONSE._serialized_end=358
- _SENDMESSAGEREQUEST._serialized_start=360
- _SENDMESSAGEREQUEST._serialized_end=427
- _SENDRESULTENTRY._serialized_start=429
- _SENDRESULTENTRY._serialized_end=550
- _SENDMESSAGERESPONSE._serialized_start=552
- _SENDMESSAGERESPONSE._serialized_end=671
- _QUERYASSIGNMENTREQUEST._serialized_start=674
- _QUERYASSIGNMENTREQUEST._serialized_end=838
- _QUERYASSIGNMENTRESPONSE._serialized_start=840
- _QUERYASSIGNMENTRESPONSE._serialized_end=962
- _RECEIVEMESSAGEREQUEST._serialized_start=965
- _RECEIVEMESSAGEREQUEST._serialized_end=1278
- _RECEIVEMESSAGERESPONSE._serialized_start=1281
- _RECEIVEMESSAGERESPONSE._serialized_end=1468
- _ACKMESSAGEENTRY._serialized_start=1470
- _ACKMESSAGEENTRY._serialized_end=1531
- _ACKMESSAGEREQUEST._serialized_start=1534
- _ACKMESSAGEREQUEST._serialized_end=1697
- _ACKMESSAGERESULTENTRY._serialized_start=1699
- _ACKMESSAGERESULTENTRY._serialized_end=1810
- _ACKMESSAGERESPONSE._serialized_start=1812
- _ACKMESSAGERESPONSE._serialized_end=1936
- _FORWARDMESSAGETODEADLETTERQUEUEREQUEST._serialized_start=1939
- _FORWARDMESSAGETODEADLETTERQUEUEREQUEST._serialized_end=2170
- _FORWARDMESSAGETODEADLETTERQUEUERESPONSE._serialized_start=2172
- _FORWARDMESSAGETODEADLETTERQUEUERESPONSE._serialized_end=2257
- _HEARTBEATREQUEST._serialized_start=2260
- _HEARTBEATREQUEST._serialized_end=2391
- _HEARTBEATRESPONSE._serialized_start=2393
- _HEARTBEATRESPONSE._serialized_end=2456
- _ENDTRANSACTIONREQUEST._serialized_start=2459
- _ENDTRANSACTIONREQUEST._serialized_end=2712
- _ENDTRANSACTIONRESPONSE._serialized_start=2714
- _ENDTRANSACTIONRESPONSE._serialized_end=2782
- _PRINTTHREADSTACKTRACECOMMAND._serialized_start=2784
- _PRINTTHREADSTACKTRACECOMMAND._serialized_end=2829
- _THREADSTACKTRACE._serialized_start=2831
- _THREADSTACKTRACE._serialized_end=2920
- _VERIFYMESSAGECOMMAND._serialized_start=2922
- _VERIFYMESSAGECOMMAND._serialized_end=3005
- _VERIFYMESSAGERESULT._serialized_start=3007
- _VERIFYMESSAGERESULT._serialized_end=3043
- _RECOVERORPHANEDTRANSACTIONCOMMAND._serialized_start=3045
- _RECOVERORPHANEDTRANSACTIONCOMMAND._serialized_end=3150
- _PUBLISHING._serialized_start=3152
- _PUBLISHING._serialized_end=3264
- _SUBSCRIPTION._serialized_start=3267
- _SUBSCRIPTION._serialized_end=3574
- _METRIC._serialized_start=3576
- _METRIC._serialized_end=3665
- _SETTINGS._serialized_start=3668
- _SETTINGS._serialized_end=4196
- _TELEMETRYCOMMAND._serialized_start=4199
- _TELEMETRYCOMMAND._serialized_end=4753
- _NOTIFYCLIENTTERMINATIONREQUEST._serialized_start=4755
- _NOTIFYCLIENTTERMINATIONREQUEST._serialized_end=4847
- _NOTIFYCLIENTTERMINATIONRESPONSE._serialized_start=4849
- _NOTIFYCLIENTTERMINATIONRESPONSE._serialized_end=4926
- _CHANGEINVISIBLEDURATIONREQUEST._serialized_start=4929
- _CHANGEINVISIBLEDURATIONREQUEST._serialized_end=5150
- _CHANGEINVISIBLEDURATIONRESPONSE._serialized_start=5152
- _CHANGEINVISIBLEDURATIONRESPONSE._serialized_end=5253
- _MESSAGINGSERVICE._serialized_start=5256
- _MESSAGINGSERVICE._serialized_end=6504
-# @@protoc_insertion_point(module_scope)
diff --git a/python/pyproject.toml b/python/pyproject.toml
new file mode 100644
index 0000000..ff01717
--- /dev/null
+++ b/python/pyproject.toml
@@ -0,0 +1,49 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+[tool.poetry]
+name = "rocketmq"
+version = "0.1.0rc1"
+description = "RocketMQ Python Client"
+authors = ["RocketMQ Authors"]
+readme = "README.md"
+packages = [{ include = "rocketmq" }]
+
+[tool.poetry.dependencies]
+python = "^3.7"
+grpcio = "^1.50.0"
+grpcio-tools = "^1.50.0"
+certifi = "^2023.5.7"
+
+[tool.poetry.dev-dependencies]
+pytest = "^7.0.07"
+
+[build-system]
+requires = ["poetry-core"]
+build-backend = "poetry.core.masonry.api"
+
+[tool.black]
+line-length = 88
+target-version = ['py37']
+include = '\.pyi?$'
+# 'extend-exclude' excludes files or directories in addition to the defaults
+extend-exclude = '''
+# A regex preceded with ^/ will apply only to files and directories
+# in the root of the project.
+(
+ ^/foo.py # exclude a file named foo.py in the root of the project
+ | .*_pb2.* # exclude autogenerated Protocol Buffer files anywhere in the project
+)
+'''
diff --git a/python/requirements.txt b/python/requirements.txt
deleted file mode 100644
index b63dce0..0000000
--- a/python/requirements.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-grpc-interceptor==0.15.1
-grpcio==1.51.3
-grpcio-tools==1.51.3
\ No newline at end of file
diff --git a/python/rocketmq/__init__.py b/python/rocketmq/__init__.py
new file mode 100644
index 0000000..3fc459f
--- /dev/null
+++ b/python/rocketmq/__init__.py
@@ -0,0 +1,38 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+import os
+
+logger = logging.getLogger("rocketmqlogger")
+logger.setLevel(logging.DEBUG)
+
+log_path = os.path.join(
+ os.path.expanduser("~"), "logs", "rocketmq", "rocketmq-client.log"
+)
+file_handler = logging.FileHandler(log_path)
+file_handler.setLevel(logging.DEBUG)
+
+console_handler = logging.StreamHandler()
+console_handler.setLevel(logging.DEBUG)
+
+formatter = logging.Formatter(
+ "%(asctime)s [%(levelname)s] [%(process)d] [%(filename)s#%(funcName)s:%(lineno)d] %(message)s"
+)
+file_handler.setFormatter(formatter)
+console_handler.setFormatter(formatter)
+
+logger.addHandler(file_handler)
+logger.addHandler(console_handler)
diff --git a/python/protocol/__init__.py b/python/rocketmq/foo.py
similarity index 97%
copy from python/protocol/__init__.py
copy to python/rocketmq/foo.py
index 2bbe709..a56f403 100644
--- a/python/protocol/__init__.py
+++ b/python/rocketmq/foo.py
@@ -4,11 +4,13 @@
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
-#
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
-# limitations under the License.
\ No newline at end of file
+# limitations under the License.
+
+bar = 1234
diff --git a/python/client/message/message_id_codec.py b/python/rocketmq/message_id_codec.py
similarity index 100%
rename from python/client/message/message_id_codec.py
rename to python/rocketmq/message_id_codec.py
diff --git a/python/protocol/__init__.py b/python/rocketmq/protocol/__init__.py
similarity index 98%
rename from python/protocol/__init__.py
rename to python/rocketmq/protocol/__init__.py
index 2bbe709..ae1e83e 100644
--- a/python/protocol/__init__.py
+++ b/python/rocketmq/protocol/__init__.py
@@ -4,11 +4,11 @@
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
-#
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
-# limitations under the License.
\ No newline at end of file
+# limitations under the License.
diff --git a/python/rocketmq/protocol/admin_pb2.py b/python/rocketmq/protocol/admin_pb2.py
new file mode 100644
index 0000000..bb49bfc
--- /dev/null
+++ b/python/rocketmq/protocol/admin_pb2.py
@@ -0,0 +1,47 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: apache/rocketmq/v2/admin.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x61pache/rocketmq/v2/admin.proto\x12\x12\x61pache.rocketmq.v2\"\x95\x01\n\x15\x43hangeLogLevelRequest\x12>\n\x05level\x18\x01 \x01(\x0e\x32/.apache.rocketmq.v2.ChangeLogLevelRequest.Level\"<\n\x05Level\x12\t\n\x05TRACE\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x08\n\x04WARN\x10\x03\x12\t\n\x05\x45RROR\x10\x04\"(\n\x16\x43hangeLogLevelResponse\x12\x0e\n\x06remark\x18\x01 \x01(\t2r\n\x05\x41\x64min\x12i\n\x0e\x43hangeLogLevel\x12).apache.rocketmq.v2.ChangeLogLevelRequest\x1a*.apache.rocketmq.v2.ChangeLogLevelResponse\"\x00\x42=\n\x12\x61pache.rocketmq.v2B\x07MQAdminP\x01\xa0\x01\x01\xd8\x01\x01\xf8\x01\x01\xaa\x02\x12\x41pache.Rocketmq.V2b\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'apache.rocketmq.v2.admin_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+ DESCRIPTOR._options = None
+ DESCRIPTOR._serialized_options = b'\n\022apache.rocketmq.v2B\007MQAdminP\001\240\001\001\330\001\001\370\001\001\252\002\022Apache.Rocketmq.V2'
+ _CHANGELOGLEVELREQUEST._serialized_start=55
+ _CHANGELOGLEVELREQUEST._serialized_end=204
+ _CHANGELOGLEVELREQUEST_LEVEL._serialized_start=144
+ _CHANGELOGLEVELREQUEST_LEVEL._serialized_end=204
+ _CHANGELOGLEVELRESPONSE._serialized_start=206
+ _CHANGELOGLEVELRESPONSE._serialized_end=246
+ _ADMIN._serialized_start=248
+ _ADMIN._serialized_end=362
+# @@protoc_insertion_point(module_scope)
diff --git a/python/rocketmq/protocol/admin_pb2.pyi b/python/rocketmq/protocol/admin_pb2.pyi
new file mode 100644
index 0000000..b286d4a
--- /dev/null
+++ b/python/rocketmq/protocol/admin_pb2.pyi
@@ -0,0 +1,40 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
+
+DESCRIPTOR: _descriptor.FileDescriptor
+
+class ChangeLogLevelRequest(_message.Message):
+ __slots__ = ["level"]
+ class Level(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ DEBUG: ChangeLogLevelRequest.Level
+ ERROR: ChangeLogLevelRequest.Level
+ INFO: ChangeLogLevelRequest.Level
+ LEVEL_FIELD_NUMBER: _ClassVar[int]
+ TRACE: ChangeLogLevelRequest.Level
+ WARN: ChangeLogLevelRequest.Level
+ level: ChangeLogLevelRequest.Level
+ def __init__(self, level: _Optional[_Union[ChangeLogLevelRequest.Level, str]] = ...) -> None: ...
+
+class ChangeLogLevelResponse(_message.Message):
+ __slots__ = ["remark"]
+ REMARK_FIELD_NUMBER: _ClassVar[int]
+ remark: str
+ def __init__(self, remark: _Optional[str] = ...) -> None: ...
diff --git a/python/protocol/admin_pb2_grpc.py b/python/rocketmq/protocol/admin_pb2_grpc.py
similarity index 78%
rename from python/protocol/admin_pb2_grpc.py
rename to python/rocketmq/protocol/admin_pb2_grpc.py
index a43fea3..6905975 100644
--- a/python/protocol/admin_pb2_grpc.py
+++ b/python/rocketmq/protocol/admin_pb2_grpc.py
@@ -4,9 +4,9 @@
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
-#
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,7 +17,7 @@
"""Client and server classes corresponding to protobuf-defined services."""
import grpc
-import admin_pb2 as admin__pb2
+from protocol import admin_pb2 as apache_dot_rocketmq_dot_v2_dot_admin__pb2
class AdminStub(object):
@@ -31,8 +31,8 @@
"""
self.ChangeLogLevel = channel.unary_unary(
'/apache.rocketmq.v2.Admin/ChangeLogLevel',
- request_serializer=admin__pb2.ChangeLogLevelRequest.SerializeToString,
- response_deserializer=admin__pb2.ChangeLogLevelResponse.FromString,
+ request_serializer=apache_dot_rocketmq_dot_v2_dot_admin__pb2.ChangeLogLevelRequest.SerializeToString,
+ response_deserializer=apache_dot_rocketmq_dot_v2_dot_admin__pb2.ChangeLogLevelResponse.FromString,
)
@@ -50,8 +50,8 @@
rpc_method_handlers = {
'ChangeLogLevel': grpc.unary_unary_rpc_method_handler(
servicer.ChangeLogLevel,
- request_deserializer=admin__pb2.ChangeLogLevelRequest.FromString,
- response_serializer=admin__pb2.ChangeLogLevelResponse.SerializeToString,
+ request_deserializer=apache_dot_rocketmq_dot_v2_dot_admin__pb2.ChangeLogLevelRequest.FromString,
+ response_serializer=apache_dot_rocketmq_dot_v2_dot_admin__pb2.ChangeLogLevelResponse.SerializeToString,
),
}
generic_handler = grpc.method_handlers_generic_handler(
@@ -75,7 +75,7 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/apache.rocketmq.v2.Admin/ChangeLogLevel',
- admin__pb2.ChangeLogLevelRequest.SerializeToString,
- admin__pb2.ChangeLogLevelResponse.FromString,
+ apache_dot_rocketmq_dot_v2_dot_admin__pb2.ChangeLogLevelRequest.SerializeToString,
+ apache_dot_rocketmq_dot_v2_dot_admin__pb2.ChangeLogLevelResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/python/rocketmq/protocol/definition_pb2.py b/python/rocketmq/protocol/definition_pb2.py
new file mode 100644
index 0000000..9ad8bc6
--- /dev/null
+++ b/python/rocketmq/protocol/definition_pb2.py
@@ -0,0 +1,109 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: apache/rocketmq/v2/definition.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
+from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#apache/rocketmq/v2/definition.proto\x12\x12\x61pache.rocketmq.v2\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\"T\n\x10\x46ilterExpression\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x1e.apache.rocketmq.v2.FilterType\x12\x12\n\nexpression\x18\x02 \x01(\t\"\xbb\x01\n\x0bRetryPolicy\x12\x14\n\x0cmax_attempts\x18\x01 \x01(\x05\x12\x45\n\x13\x65xponential_backoff\x18\x02 \x01(\x0b\x32&.apache.rocketmq.v2.ExponentialBackoffH\x00\x12\x43\n\x12\x63ustomized_backoff\x18\x03 \x01(\x0b\x32%.apache.rocketmq.v2.CustomizedBackoffH\x00\x42\n\n\x08strategy\"|\n\x12\x45xponentialBackoff\x12*\n\x07initial\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\x12&\n\x03max\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x12\n\nmultiplier\x18\x03 \x01(\x02\"<\n\x11\x43ustomizedBackoff\x12\'\n\x04next\x18\x01 \x03(\x0b\x32\x19.google.protobuf.Duration\"4\n\x08Resource\x12\x1a\n\x12resource_namespace\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"z\n\x11SubscriptionEntry\x12+\n\x05topic\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x38\n\nexpression\x18\x02 \x01(\x0b\x32$.apache.rocketmq.v2.FilterExpression\"%\n\x07\x41\x64\x64ress\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\"n\n\tEndpoints\x12\x31\n\x06scheme\x18\x01 \x01(\x0e\x32!.apache.rocketmq.v2.AddressScheme\x12.\n\taddresses\x18\x02 \x03(\x0b\x32\x1b.apache.rocketmq.v2.Address\"T\n\x06\x42roker\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x05\x12\x30\n\tendpoints\x18\x03 \x01(\x0b\x32\x1d.apache.rocketmq.v2.Endpoints\"\xe6\x01\n\x0cMessageQueue\x12+\n\x05topic\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\n\n\x02id\x18\x02 \x01(\x05\x12\x32\n\npermission\x18\x03 \x01(\x0e\x32\x1e.apache.rocketmq.v2.Permission\x12*\n\x06\x62roker\x18\x04 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Broker\x12=\n\x14\x61\x63\x63\x65pt_message_types\x18\x05 \x03(\x0e\x32\x1f.apache.rocketmq.v2.MessageType\"H\n\x06\x44igest\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x1e.apache.rocketmq.v2.DigestType\x12\x10\n\x08\x63hecksum\x18\x02 \x01(\t\"\x8f\x08\n\x10SystemProperties\x12\x10\n\x03tag\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12\x12\n\nmessage_id\x18\x03 \x01(\t\x12/\n\x0b\x62ody_digest\x18\x04 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Digest\x12\x33\n\rbody_encoding\x18\x05 \x01(\x0e\x32\x1c.apache.rocketmq.v2.Encoding\x12\x35\n\x0cmessage_type\x18\x06 \x01(\x0e\x32\x1f.apache.rocketmq.v2.MessageType\x12\x32\n\x0e\x62orn_timestamp\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x11\n\tborn_host\x18\x08 \x01(\t\x12\x38\n\x0fstore_timestamp\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x12\x12\n\nstore_host\x18\n \x01(\t\x12;\n\x12\x64\x65livery_timestamp\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02\x88\x01\x01\x12\x1b\n\x0ereceipt_handle\x18\x0c \x01(\tH\x03\x88\x01\x01\x12\x10\n\x08queue_id\x18\r \x01(\x05\x12\x19\n\x0cqueue_offset\x18\x0e \x01(\x03H\x04\x88\x01\x01\x12:\n\x12invisible_duration\x18\x0f \x01(\x0b\x32\x19.google.protobuf.DurationH\x05\x88\x01\x01\x12\x1d\n\x10\x64\x65livery_attempt\x18\x10 \x01(\x05H\x06\x88\x01\x01\x12\x1a\n\rmessage_group\x18\x11 \x01(\tH\x07\x88\x01\x01\x12\x1a\n\rtrace_context\x18\x12 \x01(\tH\x08\x88\x01\x01\x12N\n&orphaned_transaction_recovery_duration\x18\x13 \x01(\x0b\x32\x19.google.protobuf.DurationH\t\x88\x01\x01\x12\x43\n\x11\x64\x65\x61\x64_letter_queue\x18\x14 \x01(\x0b\x32#.apache.rocketmq.v2.DeadLetterQueueH\n\x88\x01\x01\x42\x06\n\x04_tagB\x12\n\x10_store_timestampB\x15\n\x13_delivery_timestampB\x11\n\x0f_receipt_handleB\x0f\n\r_queue_offsetB\x15\n\x13_invisible_durationB\x13\n\x11_delivery_attemptB\x10\n\x0e_message_groupB\x10\n\x0e_trace_contextB)\n\'_orphaned_transaction_recovery_durationB\x14\n\x12_dead_letter_queue\"4\n\x0f\x44\x65\x61\x64LetterQueue\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x12\n\nmessage_id\x18\x02 \x01(\t\"\x86\x02\n\x07Message\x12+\n\x05topic\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12H\n\x0fuser_properties\x18\x02 \x03(\x0b\x32/.apache.rocketmq.v2.Message.UserPropertiesEntry\x12?\n\x11system_properties\x18\x03 \x01(\x0b\x32$.apache.rocketmq.v2.SystemProperties\x12\x0c\n\x04\x62ody\x18\x04 \x01(\x0c\x1a\x35\n\x13UserPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"E\n\nAssignment\x12\x37\n\rmessage_queue\x18\x01 \x01(\x0b\x32 .apache.rocketmq.v2.MessageQueue\"A\n\x06Status\x12&\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x18.apache.rocketmq.v2.Code\x12\x0f\n\x07message\x18\x02 \x01(\t\"i\n\x02UA\x12.\n\x08language\x18\x01 \x01(\x0e\x32\x1c.apache.rocketmq.v2.Language\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x10\n\x08platform\x18\x03 \x01(\t\x12\x10\n\x08hostname\x18\x04 \x01(\t\"\x90\x04\n\x08Settings\x12\x38\n\x0b\x63lient_type\x18\x01 \x01(\x0e\x32\x1e.apache.rocketmq.v2.ClientTypeH\x01\x88\x01\x01\x12\x38\n\x0c\x61\x63\x63\x65ss_point\x18\x02 \x01(\x0b\x32\x1d.apache.rocketmq.v2.EndpointsH\x02\x88\x01\x01\x12<\n\x0e\x62\x61\x63koff_policy\x18\x03 \x01(\x0b\x32\x1f.apache.rocketmq.v2.RetryPolicyH\x03\x88\x01\x01\x12\x37\n\x0frequest_timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x04\x88\x01\x01\x12\x34\n\npublishing\x18\x05 \x01(\x0b\x32\x1e.apache.rocketmq.v2.PublishingH\x00\x12\x38\n\x0csubscription\x18\x06 \x01(\x0b\x32 .apache.rocketmq.v2.SubscriptionH\x00\x12*\n\nuser_agent\x18\x07 \x01(\x0b\x32\x16.apache.rocketmq.v2.UA\x12*\n\x06metric\x18\x08 \x01(\x0b\x32\x1a.apache.rocketmq.v2.MetricB\t\n\x07pub_subB\x0e\n\x0c_client_typeB\x0f\n\r_access_pointB\x11\n\x0f_backoff_policyB\x12\n\x10_request_timeout\"p\n\nPublishing\x12,\n\x06topics\x18\x01 \x03(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x15\n\rmax_body_size\x18\x02 \x01(\x05\x12\x1d\n\x15validate_message_type\x18\x03 \x01(\x08\"\xb3\x02\n\x0cSubscription\x12\x30\n\x05group\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.ResourceH\x00\x88\x01\x01\x12<\n\rsubscriptions\x18\x02 \x03(\x0b\x32%.apache.rocketmq.v2.SubscriptionEntry\x12\x11\n\x04\x66ifo\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x1f\n\x12receive_batch_size\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12<\n\x14long_polling_timeout\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationH\x03\x88\x01\x01\x42\x08\n\x06_groupB\x07\n\x05_fifoB\x15\n\x13_receive_batch_sizeB\x17\n\x15_long_polling_timeout\"Y\n\x06Metric\x12\n\n\x02on\x18\x01 \x01(\x08\x12\x35\n\tendpoints\x18\x02 \x01(\x0b\x32\x1d.apache.rocketmq.v2.EndpointsH\x00\x88\x01\x01\x42\x0c\n\n_endpoints*Y\n\x15TransactionResolution\x12&\n\"TRANSACTION_RESOLUTION_UNSPECIFIED\x10\x00\x12\n\n\x06\x43OMMIT\x10\x01\x12\x0c\n\x08ROLLBACK\x10\x02*W\n\x11TransactionSource\x12\x16\n\x12SOURCE_UNSPECIFIED\x10\x00\x12\x11\n\rSOURCE_CLIENT\x10\x01\x12\x17\n\x13SOURCE_SERVER_CHECK\x10\x02*W\n\nPermission\x12\x1a\n\x16PERMISSION_UNSPECIFIED\x10\x00\x12\x08\n\x04NONE\x10\x01\x12\x08\n\x04READ\x10\x02\x12\t\n\x05WRITE\x10\x03\x12\x0e\n\nREAD_WRITE\x10\x04*;\n\nFilterType\x12\x1b\n\x17\x46ILTER_TYPE_UNSPECIFIED\x10\x00\x12\x07\n\x03TAG\x10\x01\x12\x07\n\x03SQL\x10\x02*T\n\rAddressScheme\x12\x1e\n\x1a\x41\x44\x44RESS_SCHEME_UNSPECIFIED\x10\x00\x12\x08\n\x04IPv4\x10\x01\x12\x08\n\x04IPv6\x10\x02\x12\x0f\n\x0b\x44OMAIN_NAME\x10\x03*]\n\x0bMessageType\x12\x1c\n\x18MESSAGE_TYPE_UNSPECIFIED\x10\x00\x12\n\n\x06NORMAL\x10\x01\x12\x08\n\x04\x46IFO\x10\x02\x12\t\n\x05\x44\x45LAY\x10\x03\x12\x0f\n\x0bTRANSACTION\x10\x04*G\n\nDigestType\x12\x1b\n\x17\x44IGEST_TYPE_UNSPECIFIED\x10\x00\x12\t\n\x05\x43RC32\x10\x01\x12\x07\n\x03MD5\x10\x02\x12\x08\n\x04SHA1\x10\x03*_\n\nClientType\x12\x1b\n\x17\x43LIENT_TYPE_UNSPECIFIED\x10\x00\x12\x0c\n\x08PRODUCER\x10\x01\x12\x11\n\rPUSH_CONSUMER\x10\x02\x12\x13\n\x0fSIMPLE_CONSUMER\x10\x03*<\n\x08\x45ncoding\x12\x18\n\x14\x45NCODING_UNSPECIFIED\x10\x00\x12\x0c\n\x08IDENTITY\x10\x01\x12\x08\n\x04GZIP\x10\x02*\xfe\t\n\x04\x43ode\x12\x14\n\x10\x43ODE_UNSPECIFIED\x10\x00\x12\x08\n\x02OK\x10\xa0\x9c\x01\x12\x16\n\x10MULTIPLE_RESULTS\x10\xb0\xea\x01\x12\x11\n\x0b\x42\x41\x44_REQUEST\x10\xc0\xb8\x02\x12\x1a\n\x14ILLEGAL_ACCESS_POINT\x10\xc1\xb8\x02\x12\x13\n\rILLEGAL_TOPIC\x10\xc2\xb8\x02\x12\x1c\n\x16ILLEGAL_CONSUMER_GROUP\x10\xc3\xb8\x02\x12\x19\n\x13ILLEGAL_MESSAGE_TAG\x10\xc4\xb8\x02\x12\x19\n\x13ILLEGAL_MESSAGE_KEY\x10\xc5\xb8\x02\x12\x1b\n\x15ILLEGAL_MESSAGE_GROUP\x10\xc6\xb8\x02\x12\"\n\x1cILLEGAL_MESSAGE_PROPERTY_KEY\x10\xc7\xb8\x02\x12\x1c\n\x16INVALID_TRANSACTION_ID\x10\xc8\xb8\x02\x12\x18\n\x12ILLEGAL_MESSAGE_ID\x10\xc9\xb8\x02\x12\x1f\n\x19ILLEGAL_FILTER_EXPRESSION\x10\xca\xb8\x02\x12\x1c\n\x16ILLEGAL_INVISIBLE_TIME\x10\xcb\xb8\x02\x12\x1b\n\x15ILLEGAL_DELIVERY_TIME\x10\xcc\xb8\x02\x12\x1c\n\x16INVALID_RECEIPT_HANDLE\x10\xcd\xb8\x02\x12)\n#MESSAGE_PROPERTY_CONFLICT_WITH_TYPE\x10\xce\xb8\x02\x12\x1e\n\x18UNRECOGNIZED_CLIENT_TYPE\x10\xcf\xb8\x02\x12\x17\n\x11MESSAGE_CORRUPTED\x10\xd0\xb8\x02\x12\x18\n\x12\x43LIENT_ID_REQUIRED\x10\xd1\xb8\x02\x12\x1a\n\x14ILLEGAL_POLLING_TIME\x10\xd2\xb8\x02\x12\x12\n\x0cUNAUTHORIZED\x10\xa4\xb9\x02\x12\x16\n\x10PAYMENT_REQUIRED\x10\x88\xba\x02\x12\x0f\n\tFORBIDDEN\x10\xec\xba\x02\x12\x0f\n\tNOT_FOUND\x10\xd0\xbb\x02\x12\x17\n\x11MESSAGE_NOT_FOUND\x10\xd1\xbb\x02\x12\x15\n\x0fTOPIC_NOT_FOUND\x10\xd2\xbb\x02\x12\x1e\n\x18\x43ONSUMER_GROUP_NOT_FOUND\x10\xd3\xbb\x02\x12\x15\n\x0fREQUEST_TIMEOUT\x10\xe0\xbe\x02\x12\x17\n\x11PAYLOAD_TOO_LARGE\x10\xd4\xc2\x02\x12\x1c\n\x16MESSAGE_BODY_TOO_LARGE\x10\xd5\xc2\x02\x12\x19\n\x13PRECONDITION_FAILED\x10\xb0\xce\x02\x12\x17\n\x11TOO_MANY_REQUESTS\x10\x94\xcf\x02\x12%\n\x1fREQUEST_HEADER_FIELDS_TOO_LARGE\x10\xdc\xd0\x02\x12\"\n\x1cMESSAGE_PROPERTIES_TOO_LARGE\x10\xdd\xd0\x02\x12\x14\n\x0eINTERNAL_ERROR\x10\xd0\x86\x03\x12\x1b\n\x15INTERNAL_SERVER_ERROR\x10\xd1\x86\x03\x12\x16\n\x10HA_NOT_AVAILABLE\x10\xd2\x86\x03\x12\x15\n\x0fNOT_IMPLEMENTED\x10\xb4\x87\x03\x12\x13\n\rPROXY_TIMEOUT\x10\xe0\x89\x03\x12 \n\x1aMASTER_PERSISTENCE_TIMEOUT\x10\xe1\x89\x03\x12\x1f\n\x19SLAVE_PERSISTENCE_TIMEOUT\x10\xe2\x89\x03\x12\x11\n\x0bUNSUPPORTED\x10\xc4\x8a\x03\x12\x19\n\x13VERSION_UNSUPPORTED\x10\xc5\x8a\x03\x12%\n\x1fVERIFY_FIFO_MESSAGE_UNSUPPORTED\x10\xc6\x8a\x03\x12\x1f\n\x19\x46\x41ILED_TO_CONSUME_MESSAGE\x10\xe0\xd4\x03*\xad\x01\n\x08Language\x12\x18\n\x14LANGUAGE_UNSPECIFIED\x10\x00\x12\x08\n\x04JAVA\x10\x01\x12\x07\n\x03\x43PP\x10\x02\x12\x0b\n\x07\x44OT_NET\x10\x03\x12\n\n\x06GOLANG\x10\x04\x12\x08\n\x04RUST\x10\x05\x12\n\n\x06PYTHON\x10\x06\x12\x07\n\x03PHP\x10\x07\x12\x0b\n\x07NODE_JS\x10\x08\x12\x08\n\x04RUBY\x10\t\x12\x0f\n\x0bOBJECTIVE_C\x10\n\x12\x08\n\x04\x44\x41RT\x10\x0b\x12\n\n\x06KOTLIN\x10\x0c\x42;\n\x12\x61pache.rocketmq.v2B\x08MQDomainP\x01\xa0\x01\x01\xd8\x01\x01\xaa\x02\x12\x41pache.Rocketmq.V2b\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'apache.rocketmq.v2.definition_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+ DESCRIPTOR._options = None
+ DESCRIPTOR._serialized_options = b'\n\022apache.rocketmq.v2B\010MQDomainP\001\240\001\001\330\001\001\252\002\022Apache.Rocketmq.V2'
+ _MESSAGE_USERPROPERTIESENTRY._options = None
+ _MESSAGE_USERPROPERTIESENTRY._serialized_options = b'8\001'
+ _TRANSACTIONRESOLUTION._serialized_start=3962
+ _TRANSACTIONRESOLUTION._serialized_end=4051
+ _TRANSACTIONSOURCE._serialized_start=4053
+ _TRANSACTIONSOURCE._serialized_end=4140
+ _PERMISSION._serialized_start=4142
+ _PERMISSION._serialized_end=4229
+ _FILTERTYPE._serialized_start=4231
+ _FILTERTYPE._serialized_end=4290
+ _ADDRESSSCHEME._serialized_start=4292
+ _ADDRESSSCHEME._serialized_end=4376
+ _MESSAGETYPE._serialized_start=4378
+ _MESSAGETYPE._serialized_end=4471
+ _DIGESTTYPE._serialized_start=4473
+ _DIGESTTYPE._serialized_end=4544
+ _CLIENTTYPE._serialized_start=4546
+ _CLIENTTYPE._serialized_end=4641
+ _ENCODING._serialized_start=4643
+ _ENCODING._serialized_end=4703
+ _CODE._serialized_start=4706
+ _CODE._serialized_end=5984
+ _LANGUAGE._serialized_start=5987
+ _LANGUAGE._serialized_end=6160
+ _FILTEREXPRESSION._serialized_start=124
+ _FILTEREXPRESSION._serialized_end=208
+ _RETRYPOLICY._serialized_start=211
+ _RETRYPOLICY._serialized_end=398
+ _EXPONENTIALBACKOFF._serialized_start=400
+ _EXPONENTIALBACKOFF._serialized_end=524
+ _CUSTOMIZEDBACKOFF._serialized_start=526
+ _CUSTOMIZEDBACKOFF._serialized_end=586
+ _RESOURCE._serialized_start=588
+ _RESOURCE._serialized_end=640
+ _SUBSCRIPTIONENTRY._serialized_start=642
+ _SUBSCRIPTIONENTRY._serialized_end=764
+ _ADDRESS._serialized_start=766
+ _ADDRESS._serialized_end=803
+ _ENDPOINTS._serialized_start=805
+ _ENDPOINTS._serialized_end=915
+ _BROKER._serialized_start=917
+ _BROKER._serialized_end=1001
+ _MESSAGEQUEUE._serialized_start=1004
+ _MESSAGEQUEUE._serialized_end=1234
+ _DIGEST._serialized_start=1236
+ _DIGEST._serialized_end=1308
+ _SYSTEMPROPERTIES._serialized_start=1311
+ _SYSTEMPROPERTIES._serialized_end=2350
+ _DEADLETTERQUEUE._serialized_start=2352
+ _DEADLETTERQUEUE._serialized_end=2404
+ _MESSAGE._serialized_start=2407
+ _MESSAGE._serialized_end=2669
+ _MESSAGE_USERPROPERTIESENTRY._serialized_start=2616
+ _MESSAGE_USERPROPERTIESENTRY._serialized_end=2669
+ _ASSIGNMENT._serialized_start=2671
+ _ASSIGNMENT._serialized_end=2740
+ _STATUS._serialized_start=2742
+ _STATUS._serialized_end=2807
+ _UA._serialized_start=2809
+ _UA._serialized_end=2914
+ _SETTINGS._serialized_start=2917
+ _SETTINGS._serialized_end=3445
+ _PUBLISHING._serialized_start=3447
+ _PUBLISHING._serialized_end=3559
+ _SUBSCRIPTION._serialized_start=3562
+ _SUBSCRIPTION._serialized_end=3869
+ _METRIC._serialized_start=3871
+ _METRIC._serialized_end=3960
+# @@protoc_insertion_point(module_scope)
diff --git a/python/rocketmq/protocol/definition_pb2.pyi b/python/rocketmq/protocol/definition_pb2.pyi
new file mode 100644
index 0000000..dcd0286
--- /dev/null
+++ b/python/rocketmq/protocol/definition_pb2.pyi
@@ -0,0 +1,398 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from google.protobuf import timestamp_pb2 as _timestamp_pb2
+from google.protobuf import duration_pb2 as _duration_pb2
+from google.protobuf.internal import containers as _containers
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
+
+ADDRESS_SCHEME_UNSPECIFIED: AddressScheme
+BAD_REQUEST: Code
+CLIENT_ID_REQUIRED: Code
+CLIENT_TYPE_UNSPECIFIED: ClientType
+CODE_UNSPECIFIED: Code
+COMMIT: TransactionResolution
+CONSUMER_GROUP_NOT_FOUND: Code
+CPP: Language
+CRC32: DigestType
+DART: Language
+DELAY: MessageType
+DESCRIPTOR: _descriptor.FileDescriptor
+DIGEST_TYPE_UNSPECIFIED: DigestType
+DOMAIN_NAME: AddressScheme
+DOT_NET: Language
+ENCODING_UNSPECIFIED: Encoding
+FAILED_TO_CONSUME_MESSAGE: Code
+FIFO: MessageType
+FILTER_TYPE_UNSPECIFIED: FilterType
+FORBIDDEN: Code
+GOLANG: Language
+GZIP: Encoding
+HA_NOT_AVAILABLE: Code
+IDENTITY: Encoding
+ILLEGAL_ACCESS_POINT: Code
+ILLEGAL_CONSUMER_GROUP: Code
+ILLEGAL_DELIVERY_TIME: Code
+ILLEGAL_FILTER_EXPRESSION: Code
+ILLEGAL_INVISIBLE_TIME: Code
+ILLEGAL_MESSAGE_GROUP: Code
+ILLEGAL_MESSAGE_ID: Code
+ILLEGAL_MESSAGE_KEY: Code
+ILLEGAL_MESSAGE_PROPERTY_KEY: Code
+ILLEGAL_MESSAGE_TAG: Code
+ILLEGAL_POLLING_TIME: Code
+ILLEGAL_TOPIC: Code
+INTERNAL_ERROR: Code
+INTERNAL_SERVER_ERROR: Code
+INVALID_RECEIPT_HANDLE: Code
+INVALID_TRANSACTION_ID: Code
+IPv4: AddressScheme
+IPv6: AddressScheme
+JAVA: Language
+KOTLIN: Language
+LANGUAGE_UNSPECIFIED: Language
+MASTER_PERSISTENCE_TIMEOUT: Code
+MD5: DigestType
+MESSAGE_BODY_TOO_LARGE: Code
+MESSAGE_CORRUPTED: Code
+MESSAGE_NOT_FOUND: Code
+MESSAGE_PROPERTIES_TOO_LARGE: Code
+MESSAGE_PROPERTY_CONFLICT_WITH_TYPE: Code
+MESSAGE_TYPE_UNSPECIFIED: MessageType
+MULTIPLE_RESULTS: Code
+NODE_JS: Language
+NONE: Permission
+NORMAL: MessageType
+NOT_FOUND: Code
+NOT_IMPLEMENTED: Code
+OBJECTIVE_C: Language
+OK: Code
+PAYLOAD_TOO_LARGE: Code
+PAYMENT_REQUIRED: Code
+PERMISSION_UNSPECIFIED: Permission
+PHP: Language
+PRECONDITION_FAILED: Code
+PRODUCER: ClientType
+PROXY_TIMEOUT: Code
+PUSH_CONSUMER: ClientType
+PYTHON: Language
+READ: Permission
+READ_WRITE: Permission
+REQUEST_HEADER_FIELDS_TOO_LARGE: Code
+REQUEST_TIMEOUT: Code
+ROLLBACK: TransactionResolution
+RUBY: Language
+RUST: Language
+SHA1: DigestType
+SIMPLE_CONSUMER: ClientType
+SLAVE_PERSISTENCE_TIMEOUT: Code
+SOURCE_CLIENT: TransactionSource
+SOURCE_SERVER_CHECK: TransactionSource
+SOURCE_UNSPECIFIED: TransactionSource
+SQL: FilterType
+TAG: FilterType
+TOO_MANY_REQUESTS: Code
+TOPIC_NOT_FOUND: Code
+TRANSACTION: MessageType
+TRANSACTION_RESOLUTION_UNSPECIFIED: TransactionResolution
+UNAUTHORIZED: Code
+UNRECOGNIZED_CLIENT_TYPE: Code
+UNSUPPORTED: Code
+VERIFY_FIFO_MESSAGE_UNSUPPORTED: Code
+VERSION_UNSUPPORTED: Code
+WRITE: Permission
+
+class Address(_message.Message):
+ __slots__ = ["host", "port"]
+ HOST_FIELD_NUMBER: _ClassVar[int]
+ PORT_FIELD_NUMBER: _ClassVar[int]
+ host: str
+ port: int
+ def __init__(self, host: _Optional[str] = ..., port: _Optional[int] = ...) -> None: ...
+
+class Assignment(_message.Message):
+ __slots__ = ["message_queue"]
+ MESSAGE_QUEUE_FIELD_NUMBER: _ClassVar[int]
+ message_queue: MessageQueue
+ def __init__(self, message_queue: _Optional[_Union[MessageQueue, _Mapping]] = ...) -> None: ...
+
+class Broker(_message.Message):
+ __slots__ = ["endpoints", "id", "name"]
+ ENDPOINTS_FIELD_NUMBER: _ClassVar[int]
+ ID_FIELD_NUMBER: _ClassVar[int]
+ NAME_FIELD_NUMBER: _ClassVar[int]
+ endpoints: Endpoints
+ id: int
+ name: str
+ def __init__(self, name: _Optional[str] = ..., id: _Optional[int] = ..., endpoints: _Optional[_Union[Endpoints, _Mapping]] = ...) -> None: ...
+
+class CustomizedBackoff(_message.Message):
+ __slots__ = ["next"]
+ NEXT_FIELD_NUMBER: _ClassVar[int]
+ next: _containers.RepeatedCompositeFieldContainer[_duration_pb2.Duration]
+ def __init__(self, next: _Optional[_Iterable[_Union[_duration_pb2.Duration, _Mapping]]] = ...) -> None: ...
+
+class DeadLetterQueue(_message.Message):
+ __slots__ = ["message_id", "topic"]
+ MESSAGE_ID_FIELD_NUMBER: _ClassVar[int]
+ TOPIC_FIELD_NUMBER: _ClassVar[int]
+ message_id: str
+ topic: str
+ def __init__(self, topic: _Optional[str] = ..., message_id: _Optional[str] = ...) -> None: ...
+
+class Digest(_message.Message):
+ __slots__ = ["checksum", "type"]
+ CHECKSUM_FIELD_NUMBER: _ClassVar[int]
+ TYPE_FIELD_NUMBER: _ClassVar[int]
+ checksum: str
+ type: DigestType
+ def __init__(self, type: _Optional[_Union[DigestType, str]] = ..., checksum: _Optional[str] = ...) -> None: ...
+
+class Endpoints(_message.Message):
+ __slots__ = ["addresses", "scheme"]
+ ADDRESSES_FIELD_NUMBER: _ClassVar[int]
+ SCHEME_FIELD_NUMBER: _ClassVar[int]
+ addresses: _containers.RepeatedCompositeFieldContainer[Address]
+ scheme: AddressScheme
+ def __init__(self, scheme: _Optional[_Union[AddressScheme, str]] = ..., addresses: _Optional[_Iterable[_Union[Address, _Mapping]]] = ...) -> None: ...
+
+class ExponentialBackoff(_message.Message):
+ __slots__ = ["initial", "max", "multiplier"]
+ INITIAL_FIELD_NUMBER: _ClassVar[int]
+ MAX_FIELD_NUMBER: _ClassVar[int]
+ MULTIPLIER_FIELD_NUMBER: _ClassVar[int]
+ initial: _duration_pb2.Duration
+ max: _duration_pb2.Duration
+ multiplier: float
+ def __init__(self, initial: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., max: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., multiplier: _Optional[float] = ...) -> None: ...
+
+class FilterExpression(_message.Message):
+ __slots__ = ["expression", "type"]
+ EXPRESSION_FIELD_NUMBER: _ClassVar[int]
+ TYPE_FIELD_NUMBER: _ClassVar[int]
+ expression: str
+ type: FilterType
+ def __init__(self, type: _Optional[_Union[FilterType, str]] = ..., expression: _Optional[str] = ...) -> None: ...
+
+class Message(_message.Message):
+ __slots__ = ["body", "system_properties", "topic", "user_properties"]
+ class UserPropertiesEntry(_message.Message):
+ __slots__ = ["key", "value"]
+ KEY_FIELD_NUMBER: _ClassVar[int]
+ VALUE_FIELD_NUMBER: _ClassVar[int]
+ key: str
+ value: str
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
+ BODY_FIELD_NUMBER: _ClassVar[int]
+ SYSTEM_PROPERTIES_FIELD_NUMBER: _ClassVar[int]
+ TOPIC_FIELD_NUMBER: _ClassVar[int]
+ USER_PROPERTIES_FIELD_NUMBER: _ClassVar[int]
+ body: bytes
+ system_properties: SystemProperties
+ topic: Resource
+ user_properties: _containers.ScalarMap[str, str]
+ def __init__(self, topic: _Optional[_Union[Resource, _Mapping]] = ..., user_properties: _Optional[_Mapping[str, str]] = ..., system_properties: _Optional[_Union[SystemProperties, _Mapping]] = ..., body: _Optional[bytes] = ...) -> None: ...
+
+class MessageQueue(_message.Message):
+ __slots__ = ["accept_message_types", "broker", "id", "permission", "topic"]
+ ACCEPT_MESSAGE_TYPES_FIELD_NUMBER: _ClassVar[int]
+ BROKER_FIELD_NUMBER: _ClassVar[int]
+ ID_FIELD_NUMBER: _ClassVar[int]
+ PERMISSION_FIELD_NUMBER: _ClassVar[int]
+ TOPIC_FIELD_NUMBER: _ClassVar[int]
+ accept_message_types: _containers.RepeatedScalarFieldContainer[MessageType]
+ broker: Broker
+ id: int
+ permission: Permission
+ topic: Resource
+ def __init__(self, topic: _Optional[_Union[Resource, _Mapping]] = ..., id: _Optional[int] = ..., permission: _Optional[_Union[Permission, str]] = ..., broker: _Optional[_Union[Broker, _Mapping]] = ..., accept_message_types: _Optional[_Iterable[_Union[MessageType, str]]] = ...) -> None: ...
+
+class Metric(_message.Message):
+ __slots__ = ["endpoints", "on"]
+ ENDPOINTS_FIELD_NUMBER: _ClassVar[int]
+ ON_FIELD_NUMBER: _ClassVar[int]
+ endpoints: Endpoints
+ on: bool
+ def __init__(self, on: bool = ..., endpoints: _Optional[_Union[Endpoints, _Mapping]] = ...) -> None: ...
+
+class Publishing(_message.Message):
+ __slots__ = ["max_body_size", "topics", "validate_message_type"]
+ MAX_BODY_SIZE_FIELD_NUMBER: _ClassVar[int]
+ TOPICS_FIELD_NUMBER: _ClassVar[int]
+ VALIDATE_MESSAGE_TYPE_FIELD_NUMBER: _ClassVar[int]
+ max_body_size: int
+ topics: _containers.RepeatedCompositeFieldContainer[Resource]
+ validate_message_type: bool
+ def __init__(self, topics: _Optional[_Iterable[_Union[Resource, _Mapping]]] = ..., max_body_size: _Optional[int] = ..., validate_message_type: bool = ...) -> None: ...
+
+class Resource(_message.Message):
+ __slots__ = ["name", "resource_namespace"]
+ NAME_FIELD_NUMBER: _ClassVar[int]
+ RESOURCE_NAMESPACE_FIELD_NUMBER: _ClassVar[int]
+ name: str
+ resource_namespace: str
+ def __init__(self, resource_namespace: _Optional[str] = ..., name: _Optional[str] = ...) -> None: ...
+
+class RetryPolicy(_message.Message):
+ __slots__ = ["customized_backoff", "exponential_backoff", "max_attempts"]
+ CUSTOMIZED_BACKOFF_FIELD_NUMBER: _ClassVar[int]
+ EXPONENTIAL_BACKOFF_FIELD_NUMBER: _ClassVar[int]
+ MAX_ATTEMPTS_FIELD_NUMBER: _ClassVar[int]
+ customized_backoff: CustomizedBackoff
+ exponential_backoff: ExponentialBackoff
+ max_attempts: int
+ def __init__(self, max_attempts: _Optional[int] = ..., exponential_backoff: _Optional[_Union[ExponentialBackoff, _Mapping]] = ..., customized_backoff: _Optional[_Union[CustomizedBackoff, _Mapping]] = ...) -> None: ...
+
+class Settings(_message.Message):
+ __slots__ = ["access_point", "backoff_policy", "client_type", "metric", "publishing", "request_timeout", "subscription", "user_agent"]
+ ACCESS_POINT_FIELD_NUMBER: _ClassVar[int]
+ BACKOFF_POLICY_FIELD_NUMBER: _ClassVar[int]
+ CLIENT_TYPE_FIELD_NUMBER: _ClassVar[int]
+ METRIC_FIELD_NUMBER: _ClassVar[int]
+ PUBLISHING_FIELD_NUMBER: _ClassVar[int]
+ REQUEST_TIMEOUT_FIELD_NUMBER: _ClassVar[int]
+ SUBSCRIPTION_FIELD_NUMBER: _ClassVar[int]
+ USER_AGENT_FIELD_NUMBER: _ClassVar[int]
+ access_point: Endpoints
+ backoff_policy: RetryPolicy
+ client_type: ClientType
+ metric: Metric
+ publishing: Publishing
+ request_timeout: _duration_pb2.Duration
+ subscription: Subscription
+ user_agent: UA
+ def __init__(self, client_type: _Optional[_Union[ClientType, str]] = ..., access_point: _Optional[_Union[Endpoints, _Mapping]] = ..., backoff_policy: _Optional[_Union[RetryPolicy, _Mapping]] = ..., request_timeout: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., publishing: _Optional[_Union[Publishing, _Mapping]] = ..., subscription: _Optional[_Union[Subscription, _Mapping]] = ..., user_agent: _Optional[_Union[UA, _Mapping]] = ..., metric: _Optional[_Union[Metric, _Mapping]] = ...) -> None: ...
+
+class Status(_message.Message):
+ __slots__ = ["code", "message"]
+ CODE_FIELD_NUMBER: _ClassVar[int]
+ MESSAGE_FIELD_NUMBER: _ClassVar[int]
+ code: Code
+ message: str
+ def __init__(self, code: _Optional[_Union[Code, str]] = ..., message: _Optional[str] = ...) -> None: ...
+
+class Subscription(_message.Message):
+ __slots__ = ["fifo", "group", "long_polling_timeout", "receive_batch_size", "subscriptions"]
+ FIFO_FIELD_NUMBER: _ClassVar[int]
+ GROUP_FIELD_NUMBER: _ClassVar[int]
+ LONG_POLLING_TIMEOUT_FIELD_NUMBER: _ClassVar[int]
+ RECEIVE_BATCH_SIZE_FIELD_NUMBER: _ClassVar[int]
+ SUBSCRIPTIONS_FIELD_NUMBER: _ClassVar[int]
+ fifo: bool
+ group: Resource
+ long_polling_timeout: _duration_pb2.Duration
+ receive_batch_size: int
+ subscriptions: _containers.RepeatedCompositeFieldContainer[SubscriptionEntry]
+ def __init__(self, group: _Optional[_Union[Resource, _Mapping]] = ..., subscriptions: _Optional[_Iterable[_Union[SubscriptionEntry, _Mapping]]] = ..., fifo: bool = ..., receive_batch_size: _Optional[int] = ..., long_polling_timeout: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ...) -> None: ...
+
+class SubscriptionEntry(_message.Message):
+ __slots__ = ["expression", "topic"]
+ EXPRESSION_FIELD_NUMBER: _ClassVar[int]
+ TOPIC_FIELD_NUMBER: _ClassVar[int]
+ expression: FilterExpression
+ topic: Resource
+ def __init__(self, topic: _Optional[_Union[Resource, _Mapping]] = ..., expression: _Optional[_Union[FilterExpression, _Mapping]] = ...) -> None: ...
+
+class SystemProperties(_message.Message):
+ __slots__ = ["body_digest", "body_encoding", "born_host", "born_timestamp", "dead_letter_queue", "delivery_attempt", "delivery_timestamp", "invisible_duration", "keys", "message_group", "message_id", "message_type", "orphaned_transaction_recovery_duration", "queue_id", "queue_offset", "receipt_handle", "store_host", "store_timestamp", "tag", "trace_context"]
+ BODY_DIGEST_FIELD_NUMBER: _ClassVar[int]
+ BODY_ENCODING_FIELD_NUMBER: _ClassVar[int]
+ BORN_HOST_FIELD_NUMBER: _ClassVar[int]
+ BORN_TIMESTAMP_FIELD_NUMBER: _ClassVar[int]
+ DEAD_LETTER_QUEUE_FIELD_NUMBER: _ClassVar[int]
+ DELIVERY_ATTEMPT_FIELD_NUMBER: _ClassVar[int]
+ DELIVERY_TIMESTAMP_FIELD_NUMBER: _ClassVar[int]
+ INVISIBLE_DURATION_FIELD_NUMBER: _ClassVar[int]
+ KEYS_FIELD_NUMBER: _ClassVar[int]
+ MESSAGE_GROUP_FIELD_NUMBER: _ClassVar[int]
+ MESSAGE_ID_FIELD_NUMBER: _ClassVar[int]
+ MESSAGE_TYPE_FIELD_NUMBER: _ClassVar[int]
+ ORPHANED_TRANSACTION_RECOVERY_DURATION_FIELD_NUMBER: _ClassVar[int]
+ QUEUE_ID_FIELD_NUMBER: _ClassVar[int]
+ QUEUE_OFFSET_FIELD_NUMBER: _ClassVar[int]
+ RECEIPT_HANDLE_FIELD_NUMBER: _ClassVar[int]
+ STORE_HOST_FIELD_NUMBER: _ClassVar[int]
+ STORE_TIMESTAMP_FIELD_NUMBER: _ClassVar[int]
+ TAG_FIELD_NUMBER: _ClassVar[int]
+ TRACE_CONTEXT_FIELD_NUMBER: _ClassVar[int]
+ body_digest: Digest
+ body_encoding: Encoding
+ born_host: str
+ born_timestamp: _timestamp_pb2.Timestamp
+ dead_letter_queue: DeadLetterQueue
+ delivery_attempt: int
+ delivery_timestamp: _timestamp_pb2.Timestamp
+ invisible_duration: _duration_pb2.Duration
+ keys: _containers.RepeatedScalarFieldContainer[str]
+ message_group: str
+ message_id: str
+ message_type: MessageType
+ orphaned_transaction_recovery_duration: _duration_pb2.Duration
+ queue_id: int
+ queue_offset: int
+ receipt_handle: str
+ store_host: str
+ store_timestamp: _timestamp_pb2.Timestamp
+ tag: str
+ trace_context: str
+ def __init__(self, tag: _Optional[str] = ..., keys: _Optional[_Iterable[str]] = ..., message_id: _Optional[str] = ..., body_digest: _Optional[_Union[Digest, _Mapping]] = ..., body_encoding: _Optional[_Union[Encoding, str]] = ..., message_type: _Optional[_Union[MessageType, str]] = ..., born_timestamp: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., born_host: _Optional[str] = ..., store_timestamp: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., store_host: _Optional[str] = ..., delivery_timestamp: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., receipt_handle: _Optional[str] = ..., queue_id: _Optional[int] = ..., queue_offset: _Optional[int] = ..., invisible_duration: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., delivery_attempt: _Optional[int] = ..., message_group: _Optional[str] = ..., trace_context: _Optional[str] = ..., orphaned_transaction_recovery_duration: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., dead_letter_queue: _Optional[_Union[DeadLetterQueue, _Mapping]] = ...) -> None: ...
+
+class UA(_message.Message):
+ __slots__ = ["hostname", "language", "platform", "version"]
+ HOSTNAME_FIELD_NUMBER: _ClassVar[int]
+ LANGUAGE_FIELD_NUMBER: _ClassVar[int]
+ PLATFORM_FIELD_NUMBER: _ClassVar[int]
+ VERSION_FIELD_NUMBER: _ClassVar[int]
+ hostname: str
+ language: Language
+ platform: str
+ version: str
+ def __init__(self, language: _Optional[_Union[Language, str]] = ..., version: _Optional[str] = ..., platform: _Optional[str] = ..., hostname: _Optional[str] = ...) -> None: ...
+
+class TransactionResolution(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+
+class TransactionSource(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+
+class Permission(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+
+class FilterType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+
+class AddressScheme(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+
+class MessageType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+
+class DigestType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+
+class ClientType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+
+class Encoding(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+
+class Code(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+
+class Language(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
diff --git a/python/protocol/definition_pb2_grpc.py b/python/rocketmq/protocol/definition_pb2_grpc.py
similarity index 99%
rename from python/protocol/definition_pb2_grpc.py
rename to python/rocketmq/protocol/definition_pb2_grpc.py
index 2cd6c81..0307909 100644
--- a/python/protocol/definition_pb2_grpc.py
+++ b/python/rocketmq/protocol/definition_pb2_grpc.py
@@ -4,9 +4,9 @@
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
-#
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
diff --git a/python/rocketmq/protocol/service_pb2.py b/python/rocketmq/protocol/service_pb2.py
new file mode 100644
index 0000000..2b4ec62
--- /dev/null
+++ b/python/rocketmq/protocol/service_pb2.py
@@ -0,0 +1,102 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: apache/rocketmq/v2/service.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
+from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
+from protocol import definition_pb2 as apache_dot_rocketmq_dot_v2_dot_definition__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n apache/rocketmq/v2/service.proto\x12\x12\x61pache.rocketmq.v2\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a#apache/rocketmq/v2/definition.proto\"r\n\x11QueryRouteRequest\x12+\n\x05topic\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x30\n\tendpoints\x18\x02 \x01(\x0b\x32\x1d.apache.rocketmq.v2.Endpoints\"z\n\x12QueryRouteResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\x12\x38\n\x0emessage_queues\x18\x02 \x03(\x0b\x32 .apache.rocketmq.v2.MessageQueue\"C\n\x12SendMessageRequest\x12-\n\x08messages\x18\x01 \x03(\x0b\x32\x1b.apache.rocketmq.v2.Message\"y\n\x0fSendResultEntry\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x16\n\x0etransaction_id\x18\x03 \x01(\t\x12\x0e\n\x06offset\x18\x04 \x01(\x03\"w\n\x13SendMessageResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\x12\x34\n\x07\x65ntries\x18\x02 \x03(\x0b\x32#.apache.rocketmq.v2.SendResultEntry\"\xa4\x01\n\x16QueryAssignmentRequest\x12+\n\x05topic\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12+\n\x05group\x18\x02 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x30\n\tendpoints\x18\x03 \x01(\x0b\x32\x1d.apache.rocketmq.v2.Endpoints\"z\n\x17QueryAssignmentResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\x12\x33\n\x0b\x61ssignments\x18\x02 \x03(\x0b\x32\x1e.apache.rocketmq.v2.Assignment\"\x90\x03\n\x15ReceiveMessageRequest\x12+\n\x05group\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x37\n\rmessage_queue\x18\x02 \x01(\x0b\x32 .apache.rocketmq.v2.MessageQueue\x12?\n\x11\x66ilter_expression\x18\x03 \x01(\x0b\x32$.apache.rocketmq.v2.FilterExpression\x12\x12\n\nbatch_size\x18\x04 \x01(\x05\x12:\n\x12invisible_duration\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00\x88\x01\x01\x12\x12\n\nauto_renew\x18\x06 \x01(\x08\x12<\n\x14long_polling_timeout\x18\x07 \x01(\x0b\x32\x19.google.protobuf.DurationH\x01\x88\x01\x01\x42\x15\n\x13_invisible_durationB\x17\n\x15_long_polling_timeout\"\xbb\x01\n\x16ReceiveMessageResponse\x12,\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.StatusH\x00\x12.\n\x07message\x18\x02 \x01(\x0b\x32\x1b.apache.rocketmq.v2.MessageH\x00\x12\x38\n\x12\x64\x65livery_timestamp\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x42\t\n\x07\x63ontent\"=\n\x0f\x41\x63kMessageEntry\x12\x12\n\nmessage_id\x18\x01 \x01(\t\x12\x16\n\x0ereceipt_handle\x18\x02 \x01(\t\"\xa3\x01\n\x11\x41\x63kMessageRequest\x12+\n\x05group\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12+\n\x05topic\x18\x02 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x34\n\x07\x65ntries\x18\x03 \x03(\x0b\x32#.apache.rocketmq.v2.AckMessageEntry\"o\n\x15\x41\x63kMessageResultEntry\x12\x12\n\nmessage_id\x18\x01 \x01(\t\x12\x16\n\x0ereceipt_handle\x18\x02 \x01(\t\x12*\n\x06status\x18\x03 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\"|\n\x12\x41\x63kMessageResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\x12:\n\x07\x65ntries\x18\x02 \x03(\x0b\x32).apache.rocketmq.v2.AckMessageResultEntry\"\xe7\x01\n&ForwardMessageToDeadLetterQueueRequest\x12+\n\x05group\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12+\n\x05topic\x18\x02 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x16\n\x0ereceipt_handle\x18\x03 \x01(\t\x12\x12\n\nmessage_id\x18\x04 \x01(\t\x12\x18\n\x10\x64\x65livery_attempt\x18\x05 \x01(\x05\x12\x1d\n\x15max_delivery_attempts\x18\x06 \x01(\x05\"U\n\'ForwardMessageToDeadLetterQueueResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\"\x83\x01\n\x10HeartbeatRequest\x12\x30\n\x05group\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.ResourceH\x00\x88\x01\x01\x12\x33\n\x0b\x63lient_type\x18\x02 \x01(\x0e\x32\x1e.apache.rocketmq.v2.ClientTypeB\x08\n\x06_group\"?\n\x11HeartbeatResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\"\xfd\x01\n\x15\x45ndTransactionRequest\x12+\n\x05topic\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x16\n\x0etransaction_id\x18\x03 \x01(\t\x12=\n\nresolution\x18\x04 \x01(\x0e\x32).apache.rocketmq.v2.TransactionResolution\x12\x35\n\x06source\x18\x05 \x01(\x0e\x32%.apache.rocketmq.v2.TransactionSource\x12\x15\n\rtrace_context\x18\x06 \x01(\t\"D\n\x16\x45ndTransactionResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\"-\n\x1cPrintThreadStackTraceCommand\x12\r\n\x05nonce\x18\x01 \x01(\t\"Y\n\x10ThreadStackTrace\x12\r\n\x05nonce\x18\x01 \x01(\t\x12\x1f\n\x12thread_stack_trace\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x15\n\x13_thread_stack_trace\"S\n\x14VerifyMessageCommand\x12\r\n\x05nonce\x18\x01 \x01(\t\x12,\n\x07message\x18\x02 \x01(\x0b\x32\x1b.apache.rocketmq.v2.Message\"$\n\x13VerifyMessageResult\x12\r\n\x05nonce\x18\x01 \x01(\t\"i\n!RecoverOrphanedTransactionCommand\x12,\n\x07message\x18\x01 \x01(\x0b\x32\x1b.apache.rocketmq.v2.Message\x12\x16\n\x0etransaction_id\x18\x02 \x01(\t\"\xaa\x04\n\x10TelemetryCommand\x12/\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.StatusH\x01\x88\x01\x01\x12\x30\n\x08settings\x18\x02 \x01(\x0b\x32\x1c.apache.rocketmq.v2.SettingsH\x00\x12\x42\n\x12thread_stack_trace\x18\x03 \x01(\x0b\x32$.apache.rocketmq.v2.ThreadStackTraceH\x00\x12H\n\x15verify_message_result\x18\x04 \x01(\x0b\x32\'.apache.rocketmq.v2.VerifyMessageResultH\x00\x12\x65\n$recover_orphaned_transaction_command\x18\x05 \x01(\x0b\x32\x35.apache.rocketmq.v2.RecoverOrphanedTransactionCommandH\x00\x12\\\n print_thread_stack_trace_command\x18\x06 \x01(\x0b\x32\x30.apache.rocketmq.v2.PrintThreadStackTraceCommandH\x00\x12J\n\x16verify_message_command\x18\x07 \x01(\x0b\x32(.apache.rocketmq.v2.VerifyMessageCommandH\x00\x42\t\n\x07\x63ommandB\t\n\x07_status\"\\\n\x1eNotifyClientTerminationRequest\x12\x30\n\x05group\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.ResourceH\x00\x88\x01\x01\x42\x08\n\x06_group\"M\n\x1fNotifyClientTerminationResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\"\xdd\x01\n\x1e\x43hangeInvisibleDurationRequest\x12+\n\x05group\x18\x01 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12+\n\x05topic\x18\x02 \x01(\x0b\x32\x1c.apache.rocketmq.v2.Resource\x12\x16\n\x0ereceipt_handle\x18\x03 \x01(\t\x12\x35\n\x12invisible_duration\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x12\n\nmessage_id\x18\x05 \x01(\t\"e\n\x1f\x43hangeInvisibleDurationResponse\x12*\n\x06status\x18\x01 \x01(\x0b\x32\x1a.apache.rocketmq.v2.Status\x12\x16\n\x0ereceipt_handle\x18\x02 \x01(\t2\xe0\t\n\x10MessagingService\x12]\n\nQueryRoute\x12%.apache.rocketmq.v2.QueryRouteRequest\x1a&.apache.rocketmq.v2.QueryRouteResponse\"\x00\x12Z\n\tHeartbeat\x12$.apache.rocketmq.v2.HeartbeatRequest\x1a%.apache.rocketmq.v2.HeartbeatResponse\"\x00\x12`\n\x0bSendMessage\x12&.apache.rocketmq.v2.SendMessageRequest\x1a\'.apache.rocketmq.v2.SendMessageResponse\"\x00\x12l\n\x0fQueryAssignment\x12*.apache.rocketmq.v2.QueryAssignmentRequest\x1a+.apache.rocketmq.v2.QueryAssignmentResponse\"\x00\x12k\n\x0eReceiveMessage\x12).apache.rocketmq.v2.ReceiveMessageRequest\x1a*.apache.rocketmq.v2.ReceiveMessageResponse\"\x00\x30\x01\x12]\n\nAckMessage\x12%.apache.rocketmq.v2.AckMessageRequest\x1a&.apache.rocketmq.v2.AckMessageResponse\"\x00\x12\x9c\x01\n\x1f\x46orwardMessageToDeadLetterQueue\x12:.apache.rocketmq.v2.ForwardMessageToDeadLetterQueueRequest\x1a;.apache.rocketmq.v2.ForwardMessageToDeadLetterQueueResponse\"\x00\x12i\n\x0e\x45ndTransaction\x12).apache.rocketmq.v2.EndTransactionRequest\x1a*.apache.rocketmq.v2.EndTransactionResponse\"\x00\x12]\n\tTelemetry\x12$.apache.rocketmq.v2.TelemetryCommand\x1a$.apache.rocketmq.v2.TelemetryCommand\"\x00(\x01\x30\x01\x12\x84\x01\n\x17NotifyClientTermination\x12\x32.apache.rocketmq.v2.NotifyClientTerminationRequest\x1a\x33.apache.rocketmq.v2.NotifyClientTerminationResponse\"\x00\x12\x84\x01\n\x17\x43hangeInvisibleDuration\x12\x32.apache.rocketmq.v2.ChangeInvisibleDurationRequest\x1a\x33.apache.rocketmq.v2.ChangeInvisibleDurationResponse\"\x00\x42<\n\x12\x61pache.rocketmq.v2B\tMQServiceP\x01\xa0\x01\x01\xd8\x01\x01\xaa\x02\x12\x41pache.Rocketmq.V2b\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'apache.rocketmq.v2.service_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+ DESCRIPTOR._options = None
+ DESCRIPTOR._serialized_options = b'\n\022apache.rocketmq.v2B\tMQServiceP\001\240\001\001\330\001\001\252\002\022Apache.Rocketmq.V2'
+ _QUERYROUTEREQUEST._serialized_start=158
+ _QUERYROUTEREQUEST._serialized_end=272
+ _QUERYROUTERESPONSE._serialized_start=274
+ _QUERYROUTERESPONSE._serialized_end=396
+ _SENDMESSAGEREQUEST._serialized_start=398
+ _SENDMESSAGEREQUEST._serialized_end=465
+ _SENDRESULTENTRY._serialized_start=467
+ _SENDRESULTENTRY._serialized_end=588
+ _SENDMESSAGERESPONSE._serialized_start=590
+ _SENDMESSAGERESPONSE._serialized_end=709
+ _QUERYASSIGNMENTREQUEST._serialized_start=712
+ _QUERYASSIGNMENTREQUEST._serialized_end=876
+ _QUERYASSIGNMENTRESPONSE._serialized_start=878
+ _QUERYASSIGNMENTRESPONSE._serialized_end=1000
+ _RECEIVEMESSAGEREQUEST._serialized_start=1003
+ _RECEIVEMESSAGEREQUEST._serialized_end=1403
+ _RECEIVEMESSAGERESPONSE._serialized_start=1406
+ _RECEIVEMESSAGERESPONSE._serialized_end=1593
+ _ACKMESSAGEENTRY._serialized_start=1595
+ _ACKMESSAGEENTRY._serialized_end=1656
+ _ACKMESSAGEREQUEST._serialized_start=1659
+ _ACKMESSAGEREQUEST._serialized_end=1822
+ _ACKMESSAGERESULTENTRY._serialized_start=1824
+ _ACKMESSAGERESULTENTRY._serialized_end=1935
+ _ACKMESSAGERESPONSE._serialized_start=1937
+ _ACKMESSAGERESPONSE._serialized_end=2061
+ _FORWARDMESSAGETODEADLETTERQUEUEREQUEST._serialized_start=2064
+ _FORWARDMESSAGETODEADLETTERQUEUEREQUEST._serialized_end=2295
+ _FORWARDMESSAGETODEADLETTERQUEUERESPONSE._serialized_start=2297
+ _FORWARDMESSAGETODEADLETTERQUEUERESPONSE._serialized_end=2382
+ _HEARTBEATREQUEST._serialized_start=2385
+ _HEARTBEATREQUEST._serialized_end=2516
+ _HEARTBEATRESPONSE._serialized_start=2518
+ _HEARTBEATRESPONSE._serialized_end=2581
+ _ENDTRANSACTIONREQUEST._serialized_start=2584
+ _ENDTRANSACTIONREQUEST._serialized_end=2837
+ _ENDTRANSACTIONRESPONSE._serialized_start=2839
+ _ENDTRANSACTIONRESPONSE._serialized_end=2907
+ _PRINTTHREADSTACKTRACECOMMAND._serialized_start=2909
+ _PRINTTHREADSTACKTRACECOMMAND._serialized_end=2954
+ _THREADSTACKTRACE._serialized_start=2956
+ _THREADSTACKTRACE._serialized_end=3045
+ _VERIFYMESSAGECOMMAND._serialized_start=3047
+ _VERIFYMESSAGECOMMAND._serialized_end=3130
+ _VERIFYMESSAGERESULT._serialized_start=3132
+ _VERIFYMESSAGERESULT._serialized_end=3168
+ _RECOVERORPHANEDTRANSACTIONCOMMAND._serialized_start=3170
+ _RECOVERORPHANEDTRANSACTIONCOMMAND._serialized_end=3275
+ _TELEMETRYCOMMAND._serialized_start=3278
+ _TELEMETRYCOMMAND._serialized_end=3832
+ _NOTIFYCLIENTTERMINATIONREQUEST._serialized_start=3834
+ _NOTIFYCLIENTTERMINATIONREQUEST._serialized_end=3926
+ _NOTIFYCLIENTTERMINATIONRESPONSE._serialized_start=3928
+ _NOTIFYCLIENTTERMINATIONRESPONSE._serialized_end=4005
+ _CHANGEINVISIBLEDURATIONREQUEST._serialized_start=4008
+ _CHANGEINVISIBLEDURATIONREQUEST._serialized_end=4229
+ _CHANGEINVISIBLEDURATIONRESPONSE._serialized_start=4231
+ _CHANGEINVISIBLEDURATIONRESPONSE._serialized_end=4332
+ _MESSAGINGSERVICE._serialized_start=4335
+ _MESSAGINGSERVICE._serialized_end=5583
+# @@protoc_insertion_point(module_scope)
diff --git a/python/rocketmq/protocol/service_pb2.pyi b/python/rocketmq/protocol/service_pb2.pyi
new file mode 100644
index 0000000..7418dcb
--- /dev/null
+++ b/python/rocketmq/protocol/service_pb2.pyi
@@ -0,0 +1,294 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from google.protobuf import duration_pb2 as _duration_pb2
+from google.protobuf import timestamp_pb2 as _timestamp_pb2
+from protocol import definition_pb2 as _definition_pb2
+from google.protobuf.internal import containers as _containers
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
+
+DESCRIPTOR: _descriptor.FileDescriptor
+
+class AckMessageEntry(_message.Message):
+ __slots__ = ["message_id", "receipt_handle"]
+ MESSAGE_ID_FIELD_NUMBER: _ClassVar[int]
+ RECEIPT_HANDLE_FIELD_NUMBER: _ClassVar[int]
+ message_id: str
+ receipt_handle: str
+ def __init__(self, message_id: _Optional[str] = ..., receipt_handle: _Optional[str] = ...) -> None: ...
+
+class AckMessageRequest(_message.Message):
+ __slots__ = ["entries", "group", "topic"]
+ ENTRIES_FIELD_NUMBER: _ClassVar[int]
+ GROUP_FIELD_NUMBER: _ClassVar[int]
+ TOPIC_FIELD_NUMBER: _ClassVar[int]
+ entries: _containers.RepeatedCompositeFieldContainer[AckMessageEntry]
+ group: _definition_pb2.Resource
+ topic: _definition_pb2.Resource
+ def __init__(self, group: _Optional[_Union[_definition_pb2.Resource, _Mapping]] = ..., topic: _Optional[_Union[_definition_pb2.Resource, _Mapping]] = ..., entries: _Optional[_Iterable[_Union[AckMessageEntry, _Mapping]]] = ...) -> None: ...
+
+class AckMessageResponse(_message.Message):
+ __slots__ = ["entries", "status"]
+ ENTRIES_FIELD_NUMBER: _ClassVar[int]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ entries: _containers.RepeatedCompositeFieldContainer[AckMessageResultEntry]
+ status: _definition_pb2.Status
+ def __init__(self, status: _Optional[_Union[_definition_pb2.Status, _Mapping]] = ..., entries: _Optional[_Iterable[_Union[AckMessageResultEntry, _Mapping]]] = ...) -> None: ...
+
+class AckMessageResultEntry(_message.Message):
+ __slots__ = ["message_id", "receipt_handle", "status"]
+ MESSAGE_ID_FIELD_NUMBER: _ClassVar[int]
+ RECEIPT_HANDLE_FIELD_NUMBER: _ClassVar[int]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ message_id: str
+ receipt_handle: str
+ status: _definition_pb2.Status
+ def __init__(self, message_id: _Optional[str] = ..., receipt_handle: _Optional[str] = ..., status: _Optional[_Union[_definition_pb2.Status, _Mapping]] = ...) -> None: ...
+
+class ChangeInvisibleDurationRequest(_message.Message):
+ __slots__ = ["group", "invisible_duration", "message_id", "receipt_handle", "topic"]
+ GROUP_FIELD_NUMBER: _ClassVar[int]
+ INVISIBLE_DURATION_FIELD_NUMBER: _ClassVar[int]
+ MESSAGE_ID_FIELD_NUMBER: _ClassVar[int]
+ RECEIPT_HANDLE_FIELD_NUMBER: _ClassVar[int]
+ TOPIC_FIELD_NUMBER: _ClassVar[int]
+ group: _definition_pb2.Resource
+ invisible_duration: _duration_pb2.Duration
+ message_id: str
+ receipt_handle: str
+ topic: _definition_pb2.Resource
+ def __init__(self, group: _Optional[_Union[_definition_pb2.Resource, _Mapping]] = ..., topic: _Optional[_Union[_definition_pb2.Resource, _Mapping]] = ..., receipt_handle: _Optional[str] = ..., invisible_duration: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., message_id: _Optional[str] = ...) -> None: ...
+
+class ChangeInvisibleDurationResponse(_message.Message):
+ __slots__ = ["receipt_handle", "status"]
+ RECEIPT_HANDLE_FIELD_NUMBER: _ClassVar[int]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ receipt_handle: str
+ status: _definition_pb2.Status
+ def __init__(self, status: _Optional[_Union[_definition_pb2.Status, _Mapping]] = ..., receipt_handle: _Optional[str] = ...) -> None: ...
+
+class EndTransactionRequest(_message.Message):
+ __slots__ = ["message_id", "resolution", "source", "topic", "trace_context", "transaction_id"]
+ MESSAGE_ID_FIELD_NUMBER: _ClassVar[int]
+ RESOLUTION_FIELD_NUMBER: _ClassVar[int]
+ SOURCE_FIELD_NUMBER: _ClassVar[int]
+ TOPIC_FIELD_NUMBER: _ClassVar[int]
+ TRACE_CONTEXT_FIELD_NUMBER: _ClassVar[int]
+ TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int]
+ message_id: str
+ resolution: _definition_pb2.TransactionResolution
+ source: _definition_pb2.TransactionSource
+ topic: _definition_pb2.Resource
+ trace_context: str
+ transaction_id: str
+ def __init__(self, topic: _Optional[_Union[_definition_pb2.Resource, _Mapping]] = ..., message_id: _Optional[str] = ..., transaction_id: _Optional[str] = ..., resolution: _Optional[_Union[_definition_pb2.TransactionResolution, str]] = ..., source: _Optional[_Union[_definition_pb2.TransactionSource, str]] = ..., trace_context: _Optional[str] = ...) -> None: ...
+
+class EndTransactionResponse(_message.Message):
+ __slots__ = ["status"]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ status: _definition_pb2.Status
+ def __init__(self, status: _Optional[_Union[_definition_pb2.Status, _Mapping]] = ...) -> None: ...
+
+class ForwardMessageToDeadLetterQueueRequest(_message.Message):
+ __slots__ = ["delivery_attempt", "group", "max_delivery_attempts", "message_id", "receipt_handle", "topic"]
+ DELIVERY_ATTEMPT_FIELD_NUMBER: _ClassVar[int]
+ GROUP_FIELD_NUMBER: _ClassVar[int]
+ MAX_DELIVERY_ATTEMPTS_FIELD_NUMBER: _ClassVar[int]
+ MESSAGE_ID_FIELD_NUMBER: _ClassVar[int]
+ RECEIPT_HANDLE_FIELD_NUMBER: _ClassVar[int]
+ TOPIC_FIELD_NUMBER: _ClassVar[int]
+ delivery_attempt: int
+ group: _definition_pb2.Resource
+ max_delivery_attempts: int
+ message_id: str
+ receipt_handle: str
+ topic: _definition_pb2.Resource
+ def __init__(self, group: _Optional[_Union[_definition_pb2.Resource, _Mapping]] = ..., topic: _Optional[_Union[_definition_pb2.Resource, _Mapping]] = ..., receipt_handle: _Optional[str] = ..., message_id: _Optional[str] = ..., delivery_attempt: _Optional[int] = ..., max_delivery_attempts: _Optional[int] = ...) -> None: ...
+
+class ForwardMessageToDeadLetterQueueResponse(_message.Message):
+ __slots__ = ["status"]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ status: _definition_pb2.Status
+ def __init__(self, status: _Optional[_Union[_definition_pb2.Status, _Mapping]] = ...) -> None: ...
+
+class HeartbeatRequest(_message.Message):
+ __slots__ = ["client_type", "group"]
+ CLIENT_TYPE_FIELD_NUMBER: _ClassVar[int]
+ GROUP_FIELD_NUMBER: _ClassVar[int]
+ client_type: _definition_pb2.ClientType
+ group: _definition_pb2.Resource
+ def __init__(self, group: _Optional[_Union[_definition_pb2.Resource, _Mapping]] = ..., client_type: _Optional[_Union[_definition_pb2.ClientType, str]] = ...) -> None: ...
+
+class HeartbeatResponse(_message.Message):
+ __slots__ = ["status"]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ status: _definition_pb2.Status
+ def __init__(self, status: _Optional[_Union[_definition_pb2.Status, _Mapping]] = ...) -> None: ...
+
+class NotifyClientTerminationRequest(_message.Message):
+ __slots__ = ["group"]
+ GROUP_FIELD_NUMBER: _ClassVar[int]
+ group: _definition_pb2.Resource
+ def __init__(self, group: _Optional[_Union[_definition_pb2.Resource, _Mapping]] = ...) -> None: ...
+
+class NotifyClientTerminationResponse(_message.Message):
+ __slots__ = ["status"]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ status: _definition_pb2.Status
+ def __init__(self, status: _Optional[_Union[_definition_pb2.Status, _Mapping]] = ...) -> None: ...
+
+class PrintThreadStackTraceCommand(_message.Message):
+ __slots__ = ["nonce"]
+ NONCE_FIELD_NUMBER: _ClassVar[int]
+ nonce: str
+ def __init__(self, nonce: _Optional[str] = ...) -> None: ...
+
+class QueryAssignmentRequest(_message.Message):
+ __slots__ = ["endpoints", "group", "topic"]
+ ENDPOINTS_FIELD_NUMBER: _ClassVar[int]
+ GROUP_FIELD_NUMBER: _ClassVar[int]
+ TOPIC_FIELD_NUMBER: _ClassVar[int]
+ endpoints: _definition_pb2.Endpoints
+ group: _definition_pb2.Resource
+ topic: _definition_pb2.Resource
+ def __init__(self, topic: _Optional[_Union[_definition_pb2.Resource, _Mapping]] = ..., group: _Optional[_Union[_definition_pb2.Resource, _Mapping]] = ..., endpoints: _Optional[_Union[_definition_pb2.Endpoints, _Mapping]] = ...) -> None: ...
+
+class QueryAssignmentResponse(_message.Message):
+ __slots__ = ["assignments", "status"]
+ ASSIGNMENTS_FIELD_NUMBER: _ClassVar[int]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ assignments: _containers.RepeatedCompositeFieldContainer[_definition_pb2.Assignment]
+ status: _definition_pb2.Status
+ def __init__(self, status: _Optional[_Union[_definition_pb2.Status, _Mapping]] = ..., assignments: _Optional[_Iterable[_Union[_definition_pb2.Assignment, _Mapping]]] = ...) -> None: ...
+
+class QueryRouteRequest(_message.Message):
+ __slots__ = ["endpoints", "topic"]
+ ENDPOINTS_FIELD_NUMBER: _ClassVar[int]
+ TOPIC_FIELD_NUMBER: _ClassVar[int]
+ endpoints: _definition_pb2.Endpoints
+ topic: _definition_pb2.Resource
+ def __init__(self, topic: _Optional[_Union[_definition_pb2.Resource, _Mapping]] = ..., endpoints: _Optional[_Union[_definition_pb2.Endpoints, _Mapping]] = ...) -> None: ...
+
+class QueryRouteResponse(_message.Message):
+ __slots__ = ["message_queues", "status"]
+ MESSAGE_QUEUES_FIELD_NUMBER: _ClassVar[int]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ message_queues: _containers.RepeatedCompositeFieldContainer[_definition_pb2.MessageQueue]
+ status: _definition_pb2.Status
+ def __init__(self, status: _Optional[_Union[_definition_pb2.Status, _Mapping]] = ..., message_queues: _Optional[_Iterable[_Union[_definition_pb2.MessageQueue, _Mapping]]] = ...) -> None: ...
+
+class ReceiveMessageRequest(_message.Message):
+ __slots__ = ["auto_renew", "batch_size", "filter_expression", "group", "invisible_duration", "long_polling_timeout", "message_queue"]
+ AUTO_RENEW_FIELD_NUMBER: _ClassVar[int]
+ BATCH_SIZE_FIELD_NUMBER: _ClassVar[int]
+ FILTER_EXPRESSION_FIELD_NUMBER: _ClassVar[int]
+ GROUP_FIELD_NUMBER: _ClassVar[int]
+ INVISIBLE_DURATION_FIELD_NUMBER: _ClassVar[int]
+ LONG_POLLING_TIMEOUT_FIELD_NUMBER: _ClassVar[int]
+ MESSAGE_QUEUE_FIELD_NUMBER: _ClassVar[int]
+ auto_renew: bool
+ batch_size: int
+ filter_expression: _definition_pb2.FilterExpression
+ group: _definition_pb2.Resource
+ invisible_duration: _duration_pb2.Duration
+ long_polling_timeout: _duration_pb2.Duration
+ message_queue: _definition_pb2.MessageQueue
+ def __init__(self, group: _Optional[_Union[_definition_pb2.Resource, _Mapping]] = ..., message_queue: _Optional[_Union[_definition_pb2.MessageQueue, _Mapping]] = ..., filter_expression: _Optional[_Union[_definition_pb2.FilterExpression, _Mapping]] = ..., batch_size: _Optional[int] = ..., invisible_duration: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., auto_renew: bool = ..., long_polling_timeout: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ...) -> None: ...
+
+class ReceiveMessageResponse(_message.Message):
+ __slots__ = ["delivery_timestamp", "message", "status"]
+ DELIVERY_TIMESTAMP_FIELD_NUMBER: _ClassVar[int]
+ MESSAGE_FIELD_NUMBER: _ClassVar[int]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ delivery_timestamp: _timestamp_pb2.Timestamp
+ message: _definition_pb2.Message
+ status: _definition_pb2.Status
+ def __init__(self, status: _Optional[_Union[_definition_pb2.Status, _Mapping]] = ..., message: _Optional[_Union[_definition_pb2.Message, _Mapping]] = ..., delivery_timestamp: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
+
+class RecoverOrphanedTransactionCommand(_message.Message):
+ __slots__ = ["message", "transaction_id"]
+ MESSAGE_FIELD_NUMBER: _ClassVar[int]
+ TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int]
+ message: _definition_pb2.Message
+ transaction_id: str
+ def __init__(self, message: _Optional[_Union[_definition_pb2.Message, _Mapping]] = ..., transaction_id: _Optional[str] = ...) -> None: ...
+
+class SendMessageRequest(_message.Message):
+ __slots__ = ["messages"]
+ MESSAGES_FIELD_NUMBER: _ClassVar[int]
+ messages: _containers.RepeatedCompositeFieldContainer[_definition_pb2.Message]
+ def __init__(self, messages: _Optional[_Iterable[_Union[_definition_pb2.Message, _Mapping]]] = ...) -> None: ...
+
+class SendMessageResponse(_message.Message):
+ __slots__ = ["entries", "status"]
+ ENTRIES_FIELD_NUMBER: _ClassVar[int]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ entries: _containers.RepeatedCompositeFieldContainer[SendResultEntry]
+ status: _definition_pb2.Status
+ def __init__(self, status: _Optional[_Union[_definition_pb2.Status, _Mapping]] = ..., entries: _Optional[_Iterable[_Union[SendResultEntry, _Mapping]]] = ...) -> None: ...
+
+class SendResultEntry(_message.Message):
+ __slots__ = ["message_id", "offset", "status", "transaction_id"]
+ MESSAGE_ID_FIELD_NUMBER: _ClassVar[int]
+ OFFSET_FIELD_NUMBER: _ClassVar[int]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int]
+ message_id: str
+ offset: int
+ status: _definition_pb2.Status
+ transaction_id: str
+ def __init__(self, status: _Optional[_Union[_definition_pb2.Status, _Mapping]] = ..., message_id: _Optional[str] = ..., transaction_id: _Optional[str] = ..., offset: _Optional[int] = ...) -> None: ...
+
+class TelemetryCommand(_message.Message):
+ __slots__ = ["print_thread_stack_trace_command", "recover_orphaned_transaction_command", "settings", "status", "thread_stack_trace", "verify_message_command", "verify_message_result"]
+ PRINT_THREAD_STACK_TRACE_COMMAND_FIELD_NUMBER: _ClassVar[int]
+ RECOVER_ORPHANED_TRANSACTION_COMMAND_FIELD_NUMBER: _ClassVar[int]
+ SETTINGS_FIELD_NUMBER: _ClassVar[int]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ THREAD_STACK_TRACE_FIELD_NUMBER: _ClassVar[int]
+ VERIFY_MESSAGE_COMMAND_FIELD_NUMBER: _ClassVar[int]
+ VERIFY_MESSAGE_RESULT_FIELD_NUMBER: _ClassVar[int]
+ print_thread_stack_trace_command: PrintThreadStackTraceCommand
+ recover_orphaned_transaction_command: RecoverOrphanedTransactionCommand
+ settings: _definition_pb2.Settings
+ status: _definition_pb2.Status
+ thread_stack_trace: ThreadStackTrace
+ verify_message_command: VerifyMessageCommand
+ verify_message_result: VerifyMessageResult
+ def __init__(self, status: _Optional[_Union[_definition_pb2.Status, _Mapping]] = ..., settings: _Optional[_Union[_definition_pb2.Settings, _Mapping]] = ..., thread_stack_trace: _Optional[_Union[ThreadStackTrace, _Mapping]] = ..., verify_message_result: _Optional[_Union[VerifyMessageResult, _Mapping]] = ..., recover_orphaned_transaction_command: _Optional[_Union[RecoverOrphanedTransactionCommand, _Mapping]] = ..., print_thread_stack_trace_command: _Optional[_Union[PrintThreadStackTraceCommand, _Mapping]] = ..., verify_message_command: _Optional[_Union[VerifyMessageCommand, _Mapping]] = ...) -> None: ...
+
+class ThreadStackTrace(_message.Message):
+ __slots__ = ["nonce", "thread_stack_trace"]
+ NONCE_FIELD_NUMBER: _ClassVar[int]
+ THREAD_STACK_TRACE_FIELD_NUMBER: _ClassVar[int]
+ nonce: str
+ thread_stack_trace: str
+ def __init__(self, nonce: _Optional[str] = ..., thread_stack_trace: _Optional[str] = ...) -> None: ...
+
+class VerifyMessageCommand(_message.Message):
+ __slots__ = ["message", "nonce"]
+ MESSAGE_FIELD_NUMBER: _ClassVar[int]
+ NONCE_FIELD_NUMBER: _ClassVar[int]
+ message: _definition_pb2.Message
+ nonce: str
+ def __init__(self, nonce: _Optional[str] = ..., message: _Optional[_Union[_definition_pb2.Message, _Mapping]] = ...) -> None: ...
+
+class VerifyMessageResult(_message.Message):
+ __slots__ = ["nonce"]
+ NONCE_FIELD_NUMBER: _ClassVar[int]
+ nonce: str
+ def __init__(self, nonce: _Optional[str] = ...) -> None: ...
diff --git a/python/protocol/service_pb2_grpc.py b/python/rocketmq/protocol/service_pb2_grpc.py
similarity index 71%
rename from python/protocol/service_pb2_grpc.py
rename to python/rocketmq/protocol/service_pb2_grpc.py
index bc7050c..028aed4 100644
--- a/python/protocol/service_pb2_grpc.py
+++ b/python/rocketmq/protocol/service_pb2_grpc.py
@@ -4,9 +4,9 @@
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
-#
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,7 +17,7 @@
"""Client and server classes corresponding to protobuf-defined services."""
import grpc
-import service_pb2 as service__pb2
+from protocol import service_pb2 as apache_dot_rocketmq_dot_v2_dot_service__pb2
class MessagingServiceStub(object):
@@ -41,58 +41,58 @@
"""
self.QueryRoute = channel.unary_unary(
'/apache.rocketmq.v2.MessagingService/QueryRoute',
- request_serializer=service__pb2.QueryRouteRequest.SerializeToString,
- response_deserializer=service__pb2.QueryRouteResponse.FromString,
+ request_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.QueryRouteRequest.SerializeToString,
+ response_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.QueryRouteResponse.FromString,
)
self.Heartbeat = channel.unary_unary(
'/apache.rocketmq.v2.MessagingService/Heartbeat',
- request_serializer=service__pb2.HeartbeatRequest.SerializeToString,
- response_deserializer=service__pb2.HeartbeatResponse.FromString,
+ request_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.HeartbeatRequest.SerializeToString,
+ response_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.HeartbeatResponse.FromString,
)
self.SendMessage = channel.unary_unary(
'/apache.rocketmq.v2.MessagingService/SendMessage',
- request_serializer=service__pb2.SendMessageRequest.SerializeToString,
- response_deserializer=service__pb2.SendMessageResponse.FromString,
+ request_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.SendMessageRequest.SerializeToString,
+ response_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.SendMessageResponse.FromString,
)
self.QueryAssignment = channel.unary_unary(
'/apache.rocketmq.v2.MessagingService/QueryAssignment',
- request_serializer=service__pb2.QueryAssignmentRequest.SerializeToString,
- response_deserializer=service__pb2.QueryAssignmentResponse.FromString,
+ request_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.QueryAssignmentRequest.SerializeToString,
+ response_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.QueryAssignmentResponse.FromString,
)
self.ReceiveMessage = channel.unary_stream(
'/apache.rocketmq.v2.MessagingService/ReceiveMessage',
- request_serializer=service__pb2.ReceiveMessageRequest.SerializeToString,
- response_deserializer=service__pb2.ReceiveMessageResponse.FromString,
+ request_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.ReceiveMessageRequest.SerializeToString,
+ response_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.ReceiveMessageResponse.FromString,
)
self.AckMessage = channel.unary_unary(
'/apache.rocketmq.v2.MessagingService/AckMessage',
- request_serializer=service__pb2.AckMessageRequest.SerializeToString,
- response_deserializer=service__pb2.AckMessageResponse.FromString,
+ request_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.AckMessageRequest.SerializeToString,
+ response_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.AckMessageResponse.FromString,
)
self.ForwardMessageToDeadLetterQueue = channel.unary_unary(
'/apache.rocketmq.v2.MessagingService/ForwardMessageToDeadLetterQueue',
- request_serializer=service__pb2.ForwardMessageToDeadLetterQueueRequest.SerializeToString,
- response_deserializer=service__pb2.ForwardMessageToDeadLetterQueueResponse.FromString,
+ request_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.ForwardMessageToDeadLetterQueueRequest.SerializeToString,
+ response_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.ForwardMessageToDeadLetterQueueResponse.FromString,
)
self.EndTransaction = channel.unary_unary(
'/apache.rocketmq.v2.MessagingService/EndTransaction',
- request_serializer=service__pb2.EndTransactionRequest.SerializeToString,
- response_deserializer=service__pb2.EndTransactionResponse.FromString,
+ request_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.EndTransactionRequest.SerializeToString,
+ response_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.EndTransactionResponse.FromString,
)
self.Telemetry = channel.stream_stream(
'/apache.rocketmq.v2.MessagingService/Telemetry',
- request_serializer=service__pb2.TelemetryCommand.SerializeToString,
- response_deserializer=service__pb2.TelemetryCommand.FromString,
+ request_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.TelemetryCommand.SerializeToString,
+ response_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.TelemetryCommand.FromString,
)
self.NotifyClientTermination = channel.unary_unary(
'/apache.rocketmq.v2.MessagingService/NotifyClientTermination',
- request_serializer=service__pb2.NotifyClientTerminationRequest.SerializeToString,
- response_deserializer=service__pb2.NotifyClientTerminationResponse.FromString,
+ request_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.NotifyClientTerminationRequest.SerializeToString,
+ response_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.NotifyClientTerminationResponse.FromString,
)
self.ChangeInvisibleDuration = channel.unary_unary(
'/apache.rocketmq.v2.MessagingService/ChangeInvisibleDuration',
- request_serializer=service__pb2.ChangeInvisibleDurationRequest.SerializeToString,
- response_deserializer=service__pb2.ChangeInvisibleDurationResponse.FromString,
+ request_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.ChangeInvisibleDurationRequest.SerializeToString,
+ response_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.ChangeInvisibleDurationResponse.FromString,
)
@@ -250,58 +250,58 @@
rpc_method_handlers = {
'QueryRoute': grpc.unary_unary_rpc_method_handler(
servicer.QueryRoute,
- request_deserializer=service__pb2.QueryRouteRequest.FromString,
- response_serializer=service__pb2.QueryRouteResponse.SerializeToString,
+ request_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.QueryRouteRequest.FromString,
+ response_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.QueryRouteResponse.SerializeToString,
),
'Heartbeat': grpc.unary_unary_rpc_method_handler(
servicer.Heartbeat,
- request_deserializer=service__pb2.HeartbeatRequest.FromString,
- response_serializer=service__pb2.HeartbeatResponse.SerializeToString,
+ request_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.HeartbeatRequest.FromString,
+ response_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.HeartbeatResponse.SerializeToString,
),
'SendMessage': grpc.unary_unary_rpc_method_handler(
servicer.SendMessage,
- request_deserializer=service__pb2.SendMessageRequest.FromString,
- response_serializer=service__pb2.SendMessageResponse.SerializeToString,
+ request_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.SendMessageRequest.FromString,
+ response_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.SendMessageResponse.SerializeToString,
),
'QueryAssignment': grpc.unary_unary_rpc_method_handler(
servicer.QueryAssignment,
- request_deserializer=service__pb2.QueryAssignmentRequest.FromString,
- response_serializer=service__pb2.QueryAssignmentResponse.SerializeToString,
+ request_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.QueryAssignmentRequest.FromString,
+ response_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.QueryAssignmentResponse.SerializeToString,
),
'ReceiveMessage': grpc.unary_stream_rpc_method_handler(
servicer.ReceiveMessage,
- request_deserializer=service__pb2.ReceiveMessageRequest.FromString,
- response_serializer=service__pb2.ReceiveMessageResponse.SerializeToString,
+ request_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.ReceiveMessageRequest.FromString,
+ response_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.ReceiveMessageResponse.SerializeToString,
),
'AckMessage': grpc.unary_unary_rpc_method_handler(
servicer.AckMessage,
- request_deserializer=service__pb2.AckMessageRequest.FromString,
- response_serializer=service__pb2.AckMessageResponse.SerializeToString,
+ request_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.AckMessageRequest.FromString,
+ response_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.AckMessageResponse.SerializeToString,
),
'ForwardMessageToDeadLetterQueue': grpc.unary_unary_rpc_method_handler(
servicer.ForwardMessageToDeadLetterQueue,
- request_deserializer=service__pb2.ForwardMessageToDeadLetterQueueRequest.FromString,
- response_serializer=service__pb2.ForwardMessageToDeadLetterQueueResponse.SerializeToString,
+ request_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.ForwardMessageToDeadLetterQueueRequest.FromString,
+ response_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.ForwardMessageToDeadLetterQueueResponse.SerializeToString,
),
'EndTransaction': grpc.unary_unary_rpc_method_handler(
servicer.EndTransaction,
- request_deserializer=service__pb2.EndTransactionRequest.FromString,
- response_serializer=service__pb2.EndTransactionResponse.SerializeToString,
+ request_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.EndTransactionRequest.FromString,
+ response_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.EndTransactionResponse.SerializeToString,
),
'Telemetry': grpc.stream_stream_rpc_method_handler(
servicer.Telemetry,
- request_deserializer=service__pb2.TelemetryCommand.FromString,
- response_serializer=service__pb2.TelemetryCommand.SerializeToString,
+ request_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.TelemetryCommand.FromString,
+ response_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.TelemetryCommand.SerializeToString,
),
'NotifyClientTermination': grpc.unary_unary_rpc_method_handler(
servicer.NotifyClientTermination,
- request_deserializer=service__pb2.NotifyClientTerminationRequest.FromString,
- response_serializer=service__pb2.NotifyClientTerminationResponse.SerializeToString,
+ request_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.NotifyClientTerminationRequest.FromString,
+ response_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.NotifyClientTerminationResponse.SerializeToString,
),
'ChangeInvisibleDuration': grpc.unary_unary_rpc_method_handler(
servicer.ChangeInvisibleDuration,
- request_deserializer=service__pb2.ChangeInvisibleDurationRequest.FromString,
- response_serializer=service__pb2.ChangeInvisibleDurationResponse.SerializeToString,
+ request_deserializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.ChangeInvisibleDurationRequest.FromString,
+ response_serializer=apache_dot_rocketmq_dot_v2_dot_service__pb2.ChangeInvisibleDurationResponse.SerializeToString,
),
}
generic_handler = grpc.method_handlers_generic_handler(
@@ -335,8 +335,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/apache.rocketmq.v2.MessagingService/QueryRoute',
- service__pb2.QueryRouteRequest.SerializeToString,
- service__pb2.QueryRouteResponse.FromString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.QueryRouteRequest.SerializeToString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.QueryRouteResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -352,8 +352,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/apache.rocketmq.v2.MessagingService/Heartbeat',
- service__pb2.HeartbeatRequest.SerializeToString,
- service__pb2.HeartbeatResponse.FromString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.HeartbeatRequest.SerializeToString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.HeartbeatResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -369,8 +369,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/apache.rocketmq.v2.MessagingService/SendMessage',
- service__pb2.SendMessageRequest.SerializeToString,
- service__pb2.SendMessageResponse.FromString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.SendMessageRequest.SerializeToString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.SendMessageResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -386,8 +386,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/apache.rocketmq.v2.MessagingService/QueryAssignment',
- service__pb2.QueryAssignmentRequest.SerializeToString,
- service__pb2.QueryAssignmentResponse.FromString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.QueryAssignmentRequest.SerializeToString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.QueryAssignmentResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -403,8 +403,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_stream(request, target, '/apache.rocketmq.v2.MessagingService/ReceiveMessage',
- service__pb2.ReceiveMessageRequest.SerializeToString,
- service__pb2.ReceiveMessageResponse.FromString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.ReceiveMessageRequest.SerializeToString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.ReceiveMessageResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -420,8 +420,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/apache.rocketmq.v2.MessagingService/AckMessage',
- service__pb2.AckMessageRequest.SerializeToString,
- service__pb2.AckMessageResponse.FromString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.AckMessageRequest.SerializeToString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.AckMessageResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -437,8 +437,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/apache.rocketmq.v2.MessagingService/ForwardMessageToDeadLetterQueue',
- service__pb2.ForwardMessageToDeadLetterQueueRequest.SerializeToString,
- service__pb2.ForwardMessageToDeadLetterQueueResponse.FromString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.ForwardMessageToDeadLetterQueueRequest.SerializeToString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.ForwardMessageToDeadLetterQueueResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -454,8 +454,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/apache.rocketmq.v2.MessagingService/EndTransaction',
- service__pb2.EndTransactionRequest.SerializeToString,
- service__pb2.EndTransactionResponse.FromString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.EndTransactionRequest.SerializeToString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.EndTransactionResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -471,8 +471,8 @@
timeout=None,
metadata=None):
return grpc.experimental.stream_stream(request_iterator, target, '/apache.rocketmq.v2.MessagingService/Telemetry',
- service__pb2.TelemetryCommand.SerializeToString,
- service__pb2.TelemetryCommand.FromString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.TelemetryCommand.SerializeToString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.TelemetryCommand.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -488,8 +488,8 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/apache.rocketmq.v2.MessagingService/NotifyClientTermination',
- service__pb2.NotifyClientTerminationRequest.SerializeToString,
- service__pb2.NotifyClientTerminationResponse.FromString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.NotifyClientTerminationRequest.SerializeToString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.NotifyClientTerminationResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -505,7 +505,7 @@
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/apache.rocketmq.v2.MessagingService/ChangeInvisibleDuration',
- service__pb2.ChangeInvisibleDurationRequest.SerializeToString,
- service__pb2.ChangeInvisibleDurationResponse.FromString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.ChangeInvisibleDurationRequest.SerializeToString,
+ apache_dot_rocketmq_dot_v2_dot_service__pb2.ChangeInvisibleDurationResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/python/rocketmq/rpc_client.py b/python/rocketmq/rpc_client.py
new file mode 100644
index 0000000..420559c
--- /dev/null
+++ b/python/rocketmq/rpc_client.py
@@ -0,0 +1,117 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import asyncio
+import time
+from datetime import timedelta
+
+import certifi
+from grpc import aio, ssl_channel_credentials
+from protocol import service_pb2
+from rocketmq import logger
+from rocketmq.protocol import service_pb2_grpc
+
+
+class RpcClient:
+ channel_options = [
+ ("grpc.max_send_message_length", -1),
+ ("grpc.max_receive_message_length", -1),
+ ("grpc.connect_timeout_ms", 3000),
+ ]
+
+ def __init__(self, endpoints: str, ssl_enabled: bool = True):
+ self.__endpoints = endpoints
+ self.__cert = certifi.contents().encode(encoding="utf-8")
+ if ssl_enabled:
+ self.__channel = aio.secure_channel(
+ endpoints,
+ ssl_channel_credentials(root_certificates=self.__cert),
+ options=RpcClient.channel_options,
+ )
+ else:
+ self.__channel = aio.insecure_channel(
+ endpoints, options=RpcClient.channel_options
+ )
+ self.__stub = service_pb2_grpc.MessagingServiceStub(self.__channel)
+ self.activity_nano_time = time.monotonic_ns()
+
+ def idle_duration(self):
+ return timedelta(
+ microseconds=(time.monotonic_ns() - self.activity_nano_time) / 1000
+ )
+
+ async def query_route(
+ self, request: service_pb2.QueryRouteRequest, timeout_seconds: int
+ ):
+ return await self.__stub.QueryRoute(request, timeout=timeout_seconds)
+
+ async def heartbeat(
+ self, request: service_pb2.HeartbeatRequest, timeout_seconds: int
+ ):
+ return await self.__stub.Heartbeat(request, timeout=timeout_seconds)
+
+ async def send_message(
+ self, request: service_pb2.SendMessageRequest, timeout_seconds: int
+ ):
+ return await self.__stub.SendMessage(request, timeout=timeout_seconds)
+
+ async def query_assignment(
+ self, request: service_pb2.QueryAssignmentRequest, timeout_seconds: int
+ ):
+ return await self.__stub.QueryAssignment(request, timeout=timeout_seconds)
+
+ async def ack_message(
+ self, request: service_pb2.AckMessageRequest, timeout_seconds: int
+ ):
+ return await self.__stub.AckMessage(request, timeout=timeout_seconds)
+
+ async def forward_message_to_dead_letter_queue(
+ self,
+ request: service_pb2.ForwardMessageToDeadLetterQueueRequest,
+ timeout_seconds: int,
+ ):
+ return await self.__stub.ForwardMessageToDeadLetterQueue(
+ request, timeout=timeout_seconds
+ )
+
+ async def end_transaction(
+ self, request: service_pb2.EndTransactionRequest, timeout_seconds: int
+ ):
+ return await self.__stub.EndTransaction(request, timeout=timeout_seconds)
+
+ async def notify_client_termination(
+ self, request: service_pb2.NotifyClientTerminationRequest, timeout_seconds: int
+ ):
+ return await self.__stub.NotifyClientTermination(
+ request, timeout=timeout_seconds
+ )
+
+ async def change_invisible_duration(
+ self, request: service_pb2.ChangeInvisibleDurationRequest, timeout_seconds: int
+ ):
+ return await self.__stub.ChangeInvisibleDuration(
+ request, timeout=timeout_seconds
+ )
+
+
+async def test():
+ client = RpcClient("rmq-cn-72u353icd01.cn-hangzhou.rmq.aliyuncs.com:8080")
+ request = service_pb2.QueryRouteRequest()
+ response = await client.query_route(request, 3)
+ logger.info(response)
+
+
+if __name__ == "__main__":
+ asyncio.run(test())
diff --git a/python/protocol/__init__.py b/python/tests/__init__.py
similarity index 98%
copy from python/protocol/__init__.py
copy to python/tests/__init__.py
index 2bbe709..ae1e83e 100644
--- a/python/protocol/__init__.py
+++ b/python/tests/__init__.py
@@ -4,11 +4,11 @@
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
-#
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
-# limitations under the License.
\ No newline at end of file
+# limitations under the License.
diff --git a/python/protocol/__init__.py b/python/tests/test_foo.py
similarity index 81%
copy from python/protocol/__init__.py
copy to python/tests/test_foo.py
index 2bbe709..70b00f6 100644
--- a/python/protocol/__init__.py
+++ b/python/tests/test_foo.py
@@ -4,11 +4,19 @@
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
-#
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
-# limitations under the License.
\ No newline at end of file
+# limitations under the License.
+
+from rocketmq import foo, logger
+
+
+def test_passing():
+ assert (1, 2, 3) == (1, 2, 3)
+ logger.info("foo.bar=%d", foo.bar)
+ logger.info("test_passing")