//消息生产者
public class ProducerClient
{
public static void main(String[] args)
{
Properties properties = new Properties();
properties.put(PropertyKeyConst.ProducerId, "*****");
properties.put(PropertyKeyConst.AccessKey, "****");
properties.put(PropertyKeyConst.SecretKey, "****");
//公有云生产环境:http://onsaddr-internal.aliyun.com:8080/rocketmq/nsaddr4client-internal
//公有云公测环境:http://onsaddr-internet.aliyun.com/rocketmq/nsaddr4client-internet
//杭州金融云环境:http://jbponsaddr-internal.aliyun.com:8080/rocketmq/nsaddr4client-internal
//杭州深圳云环境:http://mq4finance-sz.addr.aliyun.com:8080/rocketmq/nsaddr4client-internal
properties.put(PropertyKeyConst.ONSAddr,
"http://onsaddr-internet.aliyun.com/rocketmq/nsaddr4client-internet");//此处以公有云生产环境为例
Producer producer = ONSFactory.createProducer(properties);
//在发送消息前,必须调用start方法来启动Producer,只需调用一次即可。
producer.start();
for(int i=0; i<10; i++)
{
String msgBody = "Hello ONS---"+System.currentTimeMillis()+"-----";
Message msg = new Message(
//Message Topic
"bookTest",
//Message Tag,
//可理解为Gmail中的标签,对消息进行再归类,方便Consumer指定过滤条件在ONS服务器过滤
"TagA",
//Message Body
//任何二进制形式的数据,ONS不做任何干预,需要Producer与Consumer协商好一致的序列化和反序列化方式
msgBody.getBytes()
);
// 设置代表消息的业务关键属性,请尽可能全局唯一。
// 以方便您在无法正常收到消息情况下,可通过ONS Console查询消息并补发。
// 注意:不设置也不会影响消息正常收发
msg.setKey("ORDERID_"+System.currentTimeMillis());
//第一种发送方式
// // 异步发送消息, 发送结果通过callback返回给客户端。
// producer.sendAsync(msg, new SendCallback() {
// @Override
// public void onSuccess(final SendResult sendResult) {
// // 消费发送成功
// System.out.println("send message success. topic=" + sendResult.getTopic() + ", msgId=" + sendResult.getMessageId());
// }
// @Override
// public void onException(OnExceptionContext context) {
// // 消息发送失败
// System.out.println("send message failed. topic=" + context.getTopic() + ", msgId=" + context.getMessageId());
// }
// });
//第二种发送方式
// 单向(Oneway)发送,只要不抛异常就是成功
producer.sendOneway(msg);
System.out.println(System.currentTimeMillis());
//第三种发送方式
//同步发送消息,只要不抛异常就是成功
// SendResult sendResult = producer.send(msg);
// System.out.println(sendResult);
}
// 在应用退出前,销毁Producer对象
// 注意:如果不销毁也没有问题
producer.shutdown();
}
}
//消息消费者
public class ConsumerTest
{
public static void main(String[] args)
{
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, "CID_chisalsoft");
properties.put(PropertyKeyConst.AccessKey, "LTAIV3ilDMvLtp1M");
properties.put(PropertyKeyConst.SecretKey, "YOCjwOSLuvfNSFoTFTEof3E09oJ1vW");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("bookTest", "*", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println(System.currentTimeMillis()+" Receive1: " + new String(message.getBody()));
//return Action.ReconsumeLater;//当前接收到的消息还是要保留在队列中,后面继续推送
return Action.CommitMessage;//将当前接收到的消息从队列中移除
}
});
consumer.start();
System.out.println("Consumer1 Started");
}
}