重点技术-20170619-阿里云-消息列队MQ-示例

//消息生产者
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");
    }
}

猜你喜欢

转载自blog.csdn.net/namelessfighter/article/details/80547234