public class RocketMQTransactionProducer {
private static final Logger log = LoggerFactory.getLogger(RocketMQTransactionProducer.class);
private RocketMQTransactionProducer() {
public static void main(String[] args) throws ClientException, IOException {
final ClientServiceProvider provider = ClientServiceProvider.loadService();
String endpoints = "rocketmq-xxx.rocketmq.ivolces.com:8080";
String accessKey = "xxxx";
String secretKey = "xxxx";
SessionCredentialsProvider sessionCredentialsProvider =
new StaticSessionCredentialsProvider(accessKey, secretKey);
ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
.setEndpoints(endpoints)
.setCredentialProvider(sessionCredentialsProvider)
String topic = "topic-transaction";
final Producer producer = provider.newProducerBuilder()
.setClientConfiguration(clientConfiguration)
.setTransactionChecker(messageView -> {
log.info("Receive transactional message check, message={}", messageView);
return TransactionResolution.COMMIT;
final Transaction transaction = producer.beginTransaction();
byte[] body = "This is a transaction message for Apache RocketMQ".getBytes(StandardCharsets.UTF_8);
final Message message = provider.newMessageBuilder()
.setKeys("yourMessageKey-1ff69ada8e0e")
final SendReceipt sendReceipt = producer.send(message, transaction);
log.info("Send message successfully, messageId={}", sendReceipt.getMessageId());
log.error("Failed to send message", t);