开发者社区> 问答> 正文

HTTP 接入通过HTTP 顺序消息如何实现?



HTTP 发送顺序消息示例代码


请在 com.alibaba.ons.message.example.producer.HttpMQProducer 中添加如下代码。

  1. [backcolor=transparent]/**
  2. [backcolor=transparent] *
  3. [backcolor=transparent] * @param msg 消息内容
  4. [backcolor=transparent] * @param tag 消息Tag
  5. [backcolor=transparent] * @param key 消息Key
  6. [backcolor=transparent] * @param isOrder 是否为顺序消息
  7. [backcolor=transparent] * @param shardingKey 顺序消息sharding key
  8. [backcolor=transparent] * @return
  9. [backcolor=transparent] */
  10. [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]){
  11. [backcolor=transparent]    [backcolor=transparent]long[backcolor=transparent] time [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]currentTimeMillis[backcolor=transparent]();
  12. [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]);
  13. [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
  14. [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];
  15. [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]);
  16. [backcolor=transparent]    req[backcolor=transparent].[backcolor=transparent]header[backcolor=transparent]([backcolor=transparent]"Signature"[backcolor=transparent],[backcolor=transparent] sign[backcolor=transparent]);
  17. [backcolor=transparent]    req[backcolor=transparent].[backcolor=transparent]header[backcolor=transparent]([backcolor=transparent]"AccessKey"[backcolor=transparent],[backcolor=transparent] accessKey[backcolor=transparent]);
  18. [backcolor=transparent]    req[backcolor=transparent].[backcolor=transparent]header[backcolor=transparent]([backcolor=transparent]"ProducerID"[backcolor=transparent],[backcolor=transparent] producerId[backcolor=transparent]);
  19. [backcolor=transparent]    req[backcolor=transparent].[backcolor=transparent]queryString[backcolor=transparent]([backcolor=transparent]"topic"[backcolor=transparent],[backcolor=transparent] topic[backcolor=transparent]);
  20. [backcolor=transparent]    req[backcolor=transparent].[backcolor=transparent]queryString[backcolor=transparent]([backcolor=transparent]"time"[backcolor=transparent],[backcolor=transparent] time[backcolor=transparent]);
  21. [backcolor=transparent]    [backcolor=transparent]//消息Tag
  22. [backcolor=transparent]    [backcolor=transparent]if[backcolor=transparent]([backcolor=transparent]tag[backcolor=transparent]!=[backcolor=transparent]null[backcolor=transparent]){
  23. [backcolor=transparent]        req[backcolor=transparent].[backcolor=transparent]queryString[backcolor=transparent]([backcolor=transparent]"tag"[backcolor=transparent],[backcolor=transparent]tag[backcolor=transparent]);
  24. [backcolor=transparent]    [backcolor=transparent]}
  25. [backcolor=transparent]    [backcolor=transparent]//消息Key
  26. [backcolor=transparent]    [backcolor=transparent]if[backcolor=transparent]([backcolor=transparent]key[backcolor=transparent]!=[backcolor=transparent]null[backcolor=transparent]){
  27. [backcolor=transparent]        req[backcolor=transparent].[backcolor=transparent]queryString[backcolor=transparent]([backcolor=transparent]"key"[backcolor=transparent],[backcolor=transparent]key[backcolor=transparent]);
  28. [backcolor=transparent]    [backcolor=transparent]}
  29. [backcolor=transparent]    [backcolor=transparent]//发送顺序消息参数
  30. [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]{
  31. [backcolor=transparent]        req[backcolor=transparent].[backcolor=transparent]header[backcolor=transparent]([backcolor=transparent]"isOrder"[backcolor=transparent],[backcolor=transparent] isOrder[backcolor=transparent]);
  32. [backcolor=transparent]        req[backcolor=transparent].[backcolor=transparent]header[backcolor=transparent]([backcolor=transparent]"shardingKey"[backcolor=transparent],[backcolor=transparent] shardingKey[backcolor=transparent]);
  33. [backcolor=transparent]    [backcolor=transparent]}
  34. [backcolor=transparent]    req[backcolor=transparent].[backcolor=transparent]body[backcolor=transparent]([backcolor=transparent]msg[backcolor=transparent]);
  35. [backcolor=transparent]    [backcolor=transparent]try[backcolor=transparent] [backcolor=transparent]{
  36. [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]();
  37. [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]{
  38. [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]());
  39. [backcolor=transparent]            [backcolor=transparent]return[backcolor=transparent] [backcolor=transparent]true[backcolor=transparent];
  40. [backcolor=transparent]        [backcolor=transparent]}[backcolor=transparent] [backcolor=transparent]else[backcolor=transparent] [backcolor=transparent]{
  41. [backcolor=transparent]            log[backcolor=transparent].[backcolor=transparent]error[backcolor=transparent]([backcolor=transparent]res[backcolor=transparent].[backcolor=transparent]getBody[backcolor=transparent]());
  42. [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]());
  43. [backcolor=transparent]        [backcolor=transparent]}
  44. [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]{
  45. [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]);
  46. [backcolor=transparent]    [backcolor=transparent]}
  47. [backcolor=transparent]    [backcolor=transparent]return[backcolor=transparent] [backcolor=transparent]false[backcolor=transparent];
  48. [backcolor=transparent]}

[backcolor=transparent]注意:
  • 顺序消息和定时消息是分开的,不能发送既顺序又定时的消息。
  • 如果是定时消息,则发送的 Topic 必须申明为非顺序,否则定时消息不会生效。


使用说明

  1. [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]);
  2. [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]);
  3. [backcolor=transparent]//发送定时消息: producer.send("msg", "tag", "key", startDeliverTime);
  4. [backcolor=transparent]//发送顺序消息: producer.sendOrderMessage("msg", "tag", "key",true,"shardingKey");
  5. [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]{
  6. [backcolor=transparent]    [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]"send message success"[backcolor=transparent]);
  7. [backcolor=transparent]}[backcolor=transparent] [backcolor=transparent]else[backcolor=transparent] [backcolor=transparent]{
  8. [backcolor=transparent]    [backcolor=transparent]System[backcolor=transparent].[backcolor=transparent]out[backcolor=transparent].[backcolor=transparent]println[backcolor=transparent]([backcolor=transparent]"send message failed"[backcolor=transparent]);
  9. [backcolor=transparent]}
  10. [backcolor=transparent]context[backcolor=transparent].[backcolor=transparent]close[backcolor=transparent]();

展开
收起
猫饭先生 2017-10-27 10:22:12 1708 0
0 条回答
写回答
取消 提交回答
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里巴巴HTTP 2.0实践及无线通信协议的演进之路 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载