Expose message-id and transaction-id out of Transaction
diff --git a/api/rocketmq/Transaction.h b/api/rocketmq/Transaction.h
index bc39c79..b519b27 100644
--- a/api/rocketmq/Transaction.h
+++ b/api/rocketmq/Transaction.h
@@ -2,6 +2,7 @@
 
 #include <cstdint>
 #include <memory>
+#include <string>
 
 #include "RocketMQ.h"
 
@@ -16,6 +17,10 @@
   virtual bool commit() = 0;
 
   virtual bool rollback() = 0;
+
+  virtual std::string messageId() const = 0;
+
+  virtual std::string transactionId() const = 0;
 };
 
 using TransactionPtr = std::unique_ptr<Transaction>;
diff --git a/src/main/cpp/rocketmq/TransactionImpl.cpp b/src/main/cpp/rocketmq/TransactionImpl.cpp
index d59518f..4a4a65a 100644
--- a/src/main/cpp/rocketmq/TransactionImpl.cpp
+++ b/src/main/cpp/rocketmq/TransactionImpl.cpp
@@ -1,5 +1,6 @@
 #include "TransactionImpl.h"
 #include "ProducerImpl.h"
+#include <string>
 
 ROCKETMQ_NAMESPACE_BEGIN
 
@@ -20,4 +21,8 @@
   return producer->rollback(message_id_, transaction_id_, trace_context_, endpoint_);
 }
 
+std::string TransactionImpl::messageId() const { return message_id_; }
+
+std::string TransactionImpl::transactionId() const { return transaction_id_; }
+
 ROCKETMQ_NAMESPACE_END
\ No newline at end of file
diff --git a/src/main/cpp/rocketmq/include/TransactionImpl.h b/src/main/cpp/rocketmq/include/TransactionImpl.h
index 0074a54..7fac135 100644
--- a/src/main/cpp/rocketmq/include/TransactionImpl.h
+++ b/src/main/cpp/rocketmq/include/TransactionImpl.h
@@ -22,6 +22,10 @@
 
   bool rollback() override;
 
+  std::string messageId() const override;
+
+  std::string transactionId() const override;
+
 private:
   std::string message_id_;
   std::string transaction_id_;