HTTP 发送顺序消息示例代码
请在 com.alibaba.ons.message.example.producer.HttpMQProducer 中添加如下代码。
- [backcolor=transparent]/**
- [backcolor=transparent] *
- [backcolor=transparent] * @param msg 消息内容
- [backcolor=transparent] * @param tag 消息Tag
- [backcolor=transparent] * @param key 消息Key
- [backcolor=transparent] * @param isOrder 是否为顺序消息
- [backcolor=transparent] * @param shardingKey 顺序消息sharding key
- [backcolor=transparent] * @return
- [backcolor=transparent] */
- [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]boolean[backcolor=transparent] sendOrderMessage[backcolor=transparent]([backcolor=transparent]String[backcolor=transparent] msg[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]String[backcolor=transparent] tag[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]String[backcolor=transparent] key[backcolor=transparent],[backcolor=transparent]boolean[backcolor=transparent] isOrder[backcolor=transparent],[backcolor=transparent]String[backcolor=transparent] shardingKey[backcolor=transparent]){
- [backcolor=transparent] [backcolor=transparent]long[backcolor=transparent] time [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]currentTimeMillis[backcolor=transparent]();
- [backcolor=transparent] [backcolor=transparent]HttpRequestWithBody[backcolor=transparent] req [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]Unirest[backcolor=transparent].[backcolor=transparent]post[backcolor=transparent]([backcolor=transparent]url[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]String[backcolor=transparent] signString [backcolor=transparent]=[backcolor=transparent] topic [backcolor=transparent]+[backcolor=transparent] NEWLINE [backcolor=transparent]+[backcolor=transparent] producerId [backcolor=transparent]+[backcolor=transparent] NEWLINE
- [backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] MD5[backcolor=transparent].[backcolor=transparent]getInstance[backcolor=transparent]().[backcolor=transparent]getMD5String[backcolor=transparent]([backcolor=transparent]msg[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] NEWLINE [backcolor=transparent]+[backcolor=transparent] time[backcolor=transparent];
- [backcolor=transparent] [backcolor=transparent]String[backcolor=transparent] sign [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]AuthUtil[backcolor=transparent].[backcolor=transparent]calSignature[backcolor=transparent]([backcolor=transparent]signString[backcolor=transparent].[backcolor=transparent]getBytes[backcolor=transparent]([backcolor=transparent]StandardCharsets[backcolor=transparent].[backcolor=transparent]UTF_8[backcolor=transparent]),[backcolor=transparent] secretKey[backcolor=transparent]);
- [backcolor=transparent] req[backcolor=transparent].[backcolor=transparent]header[backcolor=transparent]([backcolor=transparent]"Signature"[backcolor=transparent],[backcolor=transparent] sign[backcolor=transparent]);
- [backcolor=transparent] req[backcolor=transparent].[backcolor=transparent]header[backcolor=transparent]([backcolor=transparent]"AccessKey"[backcolor=transparent],[backcolor=transparent] accessKey[backcolor=transparent]);
- [backcolor=transparent] req[backcolor=transparent].[backcolor=transparent]header[backcolor=transparent]([backcolor=transparent]"ProducerID"[backcolor=transparent],[backcolor=transparent] producerId[backcolor=transparent]);
- [backcolor=transparent] req[backcolor=transparent].[backcolor=transparent]queryString[backcolor=transparent]([backcolor=transparent]"topic"[backcolor=transparent],[backcolor=transparent] topic[backcolor=transparent]);
- [backcolor=transparent] req[backcolor=transparent].[backcolor=transparent]queryString[backcolor=transparent]([backcolor=transparent]"time"[backcolor=transparent],[backcolor=transparent] time[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]//消息Tag
- [backcolor=transparent] [backcolor=transparent]if[backcolor=transparent]([backcolor=transparent]tag[backcolor=transparent]!=[backcolor=transparent]null[backcolor=transparent]){
- [backcolor=transparent] req[backcolor=transparent].[backcolor=transparent]queryString[backcolor=transparent]([backcolor=transparent]"tag"[backcolor=transparent],[backcolor=transparent]tag[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]//消息Key
- [backcolor=transparent] [backcolor=transparent]if[backcolor=transparent]([backcolor=transparent]key[backcolor=transparent]!=[backcolor=transparent]null[backcolor=transparent]){
- [backcolor=transparent] req[backcolor=transparent].[backcolor=transparent]queryString[backcolor=transparent]([backcolor=transparent]"key"[backcolor=transparent],[backcolor=transparent]key[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]//发送顺序消息参数
- [backcolor=transparent] [backcolor=transparent]if[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]isOrder [backcolor=transparent]&&[backcolor=transparent] shardingKey[backcolor=transparent]!=[backcolor=transparent]null[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] req[backcolor=transparent].[backcolor=transparent]header[backcolor=transparent]([backcolor=transparent]"isOrder"[backcolor=transparent],[backcolor=transparent] isOrder[backcolor=transparent]);
- [backcolor=transparent] req[backcolor=transparent].[backcolor=transparent]header[backcolor=transparent]([backcolor=transparent]"shardingKey"[backcolor=transparent],[backcolor=transparent] shardingKey[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] req[backcolor=transparent].[backcolor=transparent]body[backcolor=transparent]([backcolor=transparent]msg[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]try[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]HttpResponse[backcolor=transparent]<[backcolor=transparent]String[backcolor=transparent]>[backcolor=transparent] res [backcolor=transparent]=[backcolor=transparent] req[backcolor=transparent].[backcolor=transparent]asString[backcolor=transparent]();
- [backcolor=transparent] [backcolor=transparent]if[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]res[backcolor=transparent].[backcolor=transparent]getStatus[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]==[backcolor=transparent] [backcolor=transparent]201[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]res[backcolor=transparent].[backcolor=transparent]getBody[backcolor=transparent]());
- [backcolor=transparent] [backcolor=transparent]return[backcolor=transparent] [backcolor=transparent]true[backcolor=transparent];
- [backcolor=transparent] [backcolor=transparent]}[backcolor=transparent] [backcolor=transparent]else[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] log[backcolor=transparent].[backcolor=transparent]error[backcolor=transparent]([backcolor=transparent]res[backcolor=transparent].[backcolor=transparent]getBody[backcolor=transparent]());
- [backcolor=transparent] log[backcolor=transparent].[backcolor=transparent]error[backcolor=transparent]([backcolor=transparent]"post message error: {}"[backcolor=transparent],[backcolor=transparent] msg[backcolor=transparent],[backcolor=transparent] res[backcolor=transparent].[backcolor=transparent]getBody[backcolor=transparent]());
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]}[backcolor=transparent] [backcolor=transparent]catch[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]UnirestException[backcolor=transparent] e[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] log[backcolor=transparent].[backcolor=transparent]error[backcolor=transparent]([backcolor=transparent]"post message error: {}"[backcolor=transparent],[backcolor=transparent] msg[backcolor=transparent],[backcolor=transparent] e[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]return[backcolor=transparent] [backcolor=transparent]false[backcolor=transparent];
- [backcolor=transparent]}
[backcolor=transparent]注意:
- 顺序消息和定时消息是分开的,不能发送既顺序又定时的消息。
- 如果是定时消息,则发送的 Topic 必须申明为非顺序,否则定时消息不会生效。
使用说明
- [backcolor=transparent]ClassPathXmlApplicationContext[backcolor=transparent] context [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]ClassPathXmlApplicationContext[backcolor=transparent]([backcolor=transparent]"producer/producer.xml"[backcolor=transparent]);
- [backcolor=transparent]HttpMQProducer[backcolor=transparent] producer [backcolor=transparent]=[backcolor=transparent] context[backcolor=transparent].[backcolor=transparent]getBean[backcolor=transparent]([backcolor=transparent]HttpMQProducer[backcolor=transparent].[backcolor=transparent]class[backcolor=transparent]);
- [backcolor=transparent]//发送定时消息: producer.send("msg", "tag", "key", startDeliverTime);
- [backcolor=transparent]//发送顺序消息: producer.sendOrderMessage("msg", "tag", "key",true,"shardingKey");
- [backcolor=transparent]if[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]producer[backcolor=transparent].[backcolor=transparent]send[backcolor=transparent]([backcolor=transparent]"msg"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"tag"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"key"[backcolor=transparent]))[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]"send message success"[backcolor=transparent]);
- [backcolor=transparent]}[backcolor=transparent] [backcolor=transparent]else[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]"send message failed"[backcolor=transparent]);
- [backcolor=transparent]}
- [backcolor=transparent]context[backcolor=transparent].[backcolor=transparent]close[backcolor=transparent]();