diff --git a/src/main/cpp/client/SessionImpl.cpp b/src/main/cpp/client/SessionImpl.cpp
index da7e9d1..f047b76 100644
--- a/src/main/cpp/client/SessionImpl.cpp
+++ b/src/main/cpp/client/SessionImpl.cpp
@@ -89,6 +89,95 @@
   stub_->async()->AckMessage(client_context, request, response, callback);
 }
 
+void SessionImpl::heartbeat(absl::flat_hash_map<std::string, std::string> metadata,
+                            const rmq::HeartbeatRequest* request,
+                            std::function<void(const grpc::Status&, const rmq::HeartbeatResponse&)> cb) {
+  auto response = new rmq::HeartbeatResponse;
+  auto client_context = new grpc::ClientContext;
+  addMetadata(metadata, client_context);
+  setDeadline(io_timeout_, client_context);
+  auto callback = [=](grpc::Status status) {
+    auto reply = absl::WrapUnique(response);
+    auto ctx = absl::WrapUnique(client_context);
+    cb(status, *reply);
+  };
+  stub_->async()->Heartbeat(client_context, request, response, callback);
+}
+
+void SessionImpl::healthCheck(absl::flat_hash_map<std::string, std::string> metadata,
+                              const rmq::HealthCheckRequest* request,
+                              std::function<void(const grpc::Status&, const rmq::HealthCheckResponse&)> cb) {
+  auto response = new rmq::HealthCheckResponse;
+  auto client_context = new grpc::ClientContext;
+  addMetadata(metadata, client_context);
+  setDeadline(io_timeout_, client_context);
+  auto callback = [=](grpc::Status status) {
+    auto reply = absl::WrapUnique(response);
+    auto ctx = absl::WrapUnique(client_context);
+    cb(status, *reply);
+  };
+  stub_->async()->HealthCheck(client_context, request, response, callback);
+}
+
+void SessionImpl::endTransaction(absl::flat_hash_map<std::string, std::string> metadata,
+                                 const rmq::EndTransactionRequest* request,
+                                 std::function<void(const grpc::Status&, const rmq::EndTransactionResponse&)> cb) {
+  auto response = new rmq::EndTransactionResponse;
+  auto client_context = new grpc::ClientContext;
+  addMetadata(metadata, client_context);
+  setDeadline(io_timeout_, client_context);
+  auto callback = [=](grpc::Status status) {
+    auto reply = absl::WrapUnique(response);
+    auto ctx = absl::WrapUnique(client_context);
+    cb(status, *reply);
+  };
+  stub_->async()->EndTransaction(client_context, request, response, callback);
+}
+
+void SessionImpl::queryOffset(absl::flat_hash_map<std::string, std::string> metadata,
+                              const rmq::QueryOffsetRequest* request,
+                              std::function<void(const grpc::Status&, const rmq::QueryOffsetResponse&)> cb) {
+  auto response = new rmq::QueryOffsetResponse;
+  auto client_context = new grpc::ClientContext;
+  addMetadata(metadata, client_context);
+  setDeadline(io_timeout_, client_context);
+  auto callback = [=](grpc::Status status) {
+    auto reply = absl::WrapUnique(response);
+    auto ctx = absl::WrapUnique(client_context);
+    cb(status, *reply);
+  };
+  stub_->async()->QueryOffset(client_context, request, response, callback);
+}
+
+void SessionImpl::pull(absl::flat_hash_map<std::string, std::string> metadata, const rmq::PullMessageRequest* request,
+                       std::function<void(const grpc::Status&, const rmq::PullMessageResponse&)> cb) {
+  auto response = new rmq::PullMessageResponse;
+  auto client_context = new grpc::ClientContext;
+  addMetadata(metadata, client_context);
+  setDeadline(io_timeout_, client_context);
+  auto callback = [=](grpc::Status status) {
+    auto reply = absl::WrapUnique(response);
+    auto ctx = absl::WrapUnique(client_context);
+    cb(status, *reply);
+  };
+  stub_->async()->PullMessage(client_context, request, response, callback);
+}
+
+void SessionImpl::forwardMessageToDeadLetterQueue(
+    absl::flat_hash_map<std::string, std::string> metadata, const rmq::ForwardMessageToDeadLetterQueueRequest* request,
+    std::function<void(const grpc::Status&, const rmq::ForwardMessageToDeadLetterQueueResponse&)> cb) {
+  auto response = new rmq::ForwardMessageToDeadLetterQueueResponse;
+  auto client_context = new grpc::ClientContext;
+  addMetadata(metadata, client_context);
+  setDeadline(io_timeout_, client_context);
+  auto callback = [=](grpc::Status status) {
+    auto reply = absl::WrapUnique(response);
+    auto ctx = absl::WrapUnique(client_context);
+    cb(status, *reply);
+  };
+  stub_->async()->ForwardMessageToDeadLetterQueue(client_context, request, response, callback);
+}
+
 void SessionImpl::addMetadata(const absl::flat_hash_map<std::string, std::string>& metadata,
                               grpc::ClientContext* client_context) {
   for (const auto& entry : metadata) {
diff --git a/src/main/cpp/client/include/Session.h b/src/main/cpp/client/include/Session.h
index 4ad6de1..651f94d 100644
--- a/src/main/cpp/client/include/Session.h
+++ b/src/main/cpp/client/include/Session.h
@@ -56,6 +56,29 @@
 
   virtual void ack(absl::flat_hash_map<std::string, std::string> metadata, const rmq::AckMessageRequest* request,
                    std::function<void(const grpc::Status&, const rmq::AckMessageResponse&)> cb) PURE;
+
+  virtual void heartbeat(absl::flat_hash_map<std::string, std::string> metadata, const rmq::HeartbeatRequest* request,
+                         std::function<void(const grpc::Status&, const rmq::HeartbeatResponse&)> cb) PURE;
+
+  virtual void healthCheck(absl::flat_hash_map<std::string, std::string> metadata,
+                           const rmq::HealthCheckRequest* request,
+                           std::function<void(const grpc::Status&, const rmq::HealthCheckResponse&)> cb) PURE;
+
+  virtual void endTransaction(absl::flat_hash_map<std::string, std::string> metadata,
+                              const rmq::EndTransactionRequest* request,
+                              std::function<void(const grpc::Status&, const rmq::EndTransactionResponse&)> cb) PURE;
+
+  virtual void queryOffset(absl::flat_hash_map<std::string, std::string> metadata,
+                           const rmq::QueryOffsetRequest* request,
+                           std::function<void(const grpc::Status&, const rmq::QueryOffsetResponse&)> cb) PURE;
+
+  virtual void pull(absl::flat_hash_map<std::string, std::string> metadata, const rmq::PullMessageRequest* request,
+                    std::function<void(const grpc::Status&, const rmq::PullMessageResponse&)> cb) PURE;
+
+  virtual void forwardMessageToDeadLetterQueue(
+      absl::flat_hash_map<std::string, std::string> metadata,
+      const rmq::ForwardMessageToDeadLetterQueueRequest* request,
+      std::function<void(const grpc::Status&, const rmq::ForwardMessageToDeadLetterQueueResponse&)> cb) PURE;
 };
 
 ROCKETMQ_NAMESPACE_END
\ No newline at end of file
diff --git a/src/main/cpp/client/include/SessionImpl.h b/src/main/cpp/client/include/SessionImpl.h
index f07f801..9e84aff 100644
--- a/src/main/cpp/client/include/SessionImpl.h
+++ b/src/main/cpp/client/include/SessionImpl.h
@@ -35,6 +35,26 @@
   void ack(absl::flat_hash_map<std::string, std::string> metadata, const rmq::AckMessageRequest* request,
            std::function<void(const grpc::Status&, const rmq::AckMessageResponse&)> cb) override;
 
+  void heartbeat(absl::flat_hash_map<std::string, std::string> metadata, const rmq::HeartbeatRequest* request,
+                 std::function<void(const grpc::Status&, const rmq::HeartbeatResponse&)> cb) override;
+
+  void healthCheck(absl::flat_hash_map<std::string, std::string> metadata, const rmq::HealthCheckRequest* request,
+                   std::function<void(const grpc::Status&, const rmq::HealthCheckResponse&)> cb) override;
+
+  void endTransaction(absl::flat_hash_map<std::string, std::string> metadata, const rmq::EndTransactionRequest* request,
+                      std::function<void(const grpc::Status&, const rmq::EndTransactionResponse&)> cb) override;
+
+  void queryOffset(absl::flat_hash_map<std::string, std::string> metadata, const rmq::QueryOffsetRequest* request,
+                   std::function<void(const grpc::Status&, const rmq::QueryOffsetResponse&)> cb) override;
+
+  void pull(absl::flat_hash_map<std::string, std::string> metadata, const rmq::PullMessageRequest* request,
+            std::function<void(const grpc::Status&, const rmq::PullMessageResponse&)> cb) override;
+
+  void forwardMessageToDeadLetterQueue(
+      absl::flat_hash_map<std::string, std::string> metadata,
+      const rmq::ForwardMessageToDeadLetterQueueRequest* request,
+      std::function<void(const grpc::Status&, const rmq::ForwardMessageToDeadLetterQueueResponse&)> cb) override;
+
 private:
   std::shared_ptr<grpc::Channel> channel_;
   std::unique_ptr<rmq::MessagingService::Stub> stub_;
