public class ProducerNormalMessageAsync {
private static final Logger log = LoggerFactory.getLogger(ProducerNormalMessageAsync.class);
private ProducerNormalMessageAsync() {
public static void main(String[] args) throws ClientException, InterruptedException, 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 = "yourTopicName";
final Producer producer = provider.newProducerBuilder()
.setClientConfiguration(clientConfiguration)
byte[] body = "This is a normal message for Apache RocketMQ".getBytes(StandardCharsets.UTF_8);
String tag = "yourMessageTagA";
final Message message = provider.newMessageBuilder()
.setKeys("yourMessageKey-1c151062f96e")
final CompletableFuture<SendReceipt> future = producer.sendAsync(message);
ExecutorService sendCallbackExecutor = Executors.newCachedThreadPool();
future.whenCompleteAsync((sendReceipt, throwable) -> {
if (null != throwable) {
log.error("Failed to send message", throwable);
log.info("Send message successfully, messageId={}", sendReceipt.getMessageId());
}, sendCallbackExecutor);
Thread.sleep(Long.MAX_VALUE);