集群配置成功后可以试试下面demo
我的集群是4.4.0版本,maven选择4.4.0
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.4.0</version>
</dependency>
同步发送消息
public class SyncProducer {
public static void main(String[] args) throws InterruptedException, RemotingException, MQClientException, MQBrokerException {
// 1.创建消息生产者,并且制定生产者组名
DefaultMQProducer producer = new DefaultMQProducer("group1");
// 设置超时时间
producer.setSendMsgTimeout(8000);
// 2.指定namesrv地址
producer.setNamesrvAddr("192.168.48.128:9876;192.168.48.137:9876");
// producer.setNamesrvAddr("47.96.165.93:9876;106.52.131.197:9876");
// 3.启动producer
try {
producer.start();
} catch (MQClientException e) {
e.printStackTrace();
}
for (int i = 0;i<10;i++){
// 4.创建消息对象,指定主题topic,tag和消息体
Message msg = new Message("base","tag1",("hello world"+i).getBytes());
// 5.发送消息
SendResult result = producer.send(msg);
SendStatus status = result.getSendStatus();
String msgId = result.getMsgId();
int queueId = result.getMessageQueue().getQueueId();
System.out.println("send status:"+result+",message ID:"+msgId+",queue:"+queueId);
TimeUnit.SECONDS.sleep(1);
System.out.println(i);
}
// * 关闭producer
producer.shutdown();
}
}
异步发送消息
public class AsyncProducer {
public static void main(String[] args) throws MQClientException, UnsupportedEncodingException, RemotingException, InterruptedException {
// 实例化消息生产者Producer
DefaultMQProducer producer = new DefaultMQProducer("group2");
// 超时时间
producer.setSendMsgTimeout(10000);
// 设置namesrv
producer.setNamesrvAddr("192.168.48.128:9876;192.168.48.137:9876");
// producer.setNamesrvAddr("106.52.131.197:9876;47.96.165.93:9876");
// 启动producer实例
producer.start();
producer.setRetryTimesWhenSendAsyncFailed(0);
int i = 0;
for(;i<100;i++){
final int index = i;
// 创建消息,并且制定topic,tag和消息体
Message msg = new Message("base2-by-async", "tag2","orderID188","hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
// SendCallback接收异步返回结果的回调
producer.send(msg,new SendCallback(){
@Override
public void onSuccess(SendResult sendResult) {
System.out.println(sendResult);
}
@Override
public void onException(Throwable throwable) {
System.out.println(throwable);
}
});
}
TimeUnit.SECONDS.sleep(1);
System.out.println("i="+i);
producer.shutdown();
}
}
单向发送消息(比如日志)
public class OneWayProducer {
// 日志发送
public static void main(String[] args) {
// 实例化Producer
DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
// 设置NameServer的地址
producer.setNamesrvAddr("localhost:9876");
// 启动Producer
try {
producer.start();
for(int i=0;i<100;i++){
// 创建消息,并且指定Topic,Tag和消息体
Message msg = new Message("TopicTest","Tag3",("Hello Rocketmq"+i).getBytes(RemotingHelper.DEFAULT_CHARSET));
producer.sendOneway(msg);
producer.shutdown();
}
} catch (MQClientException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (RemotingException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
消费消息(默认消费方式为负载均衡,下面设置的为广播)
public class Consumer {
public static void main(String[] args) {
consumer();
}
public static void consumer(){
// 1 创建消费者Consumer ,并确定消费者组名
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("group1");
// 2 指定NameServer地址
consumer.setNamesrvAddr("192.168.48.128:9876;192.168.48.137:9876");
// consumer.setNamesrvAddr("106.52.131.197:9876;47.96.165.93:9876");
try {
// 3 订阅主题Topic和Tag
consumer.subscribe("base","tag1");
// 设置订阅模式,有负载均衡、广播两种模式,默认负载均衡,下面设置的是广播
consumer.setMessageModel(MessageModel.BROADCASTING);
// 4 设置回调函数,处理消息
consumer.registerMessageListener(new MessageListenerConcurrently() {
// 接受消息内容
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
for(MessageExt msg:msgs){
System.out.println(msg.toString());
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
// 5 启动消息内容
consumer.start();
} catch (MQClientException e) {
e.printStackTrace();
}
}
}