开发者社区 问答 正文

HTTP 接入Java 收发消息如何实现?



下载官网 Demo


下载地址

导入工程


HTTP 的 Demo 在 http/java-http-demo路径下,使用 Eclipse 或者 Idea 打开http/java-http-demo。具体可参考 Idea 配置教程

修改配置文件


  1. 修改 producer.xml,该文件在src/main/resources/producer/producer.xml路径下。如下所示,修改为自己在阿里云商分配的配置:
    域名 Domain 列表 <bean id="producer" class="com.alibaba.ons.message.example.producer.HttpMQProducer">
  2. <!-- domain,请替换,从域名列表选择Topic所在region的域名 -->
  3. <property name="url" value="http://domain/message" />
  4. <!-- 阿里云身份验证码,请替换 -->
  5. <property name="accessKey" value="XXXXXX" />
  6. <!-- 阿里云身份验证密钥,请替换 -->
  7. <property name="secretKey" value="XXXXXX" />
  8. <!-- MQ控制台创建的Topic,请替换 -->
  9. <property name="topic" value="XXXXXX" />
  10. <!-- MQ控制台创建的Producer ID,请替换 -->
  11. <property name="producerId" value="XXXXXX" />
  12. </bean>

修改 consumer.xml,该文件在 src/main/resources/consumer/consumer.xml路径下。如下所示,修改为自己的配置:
  1. <bean id="consumer" class="com.alibaba.ons.message.example.consumer.HttpMQConsumer">
  2. <!-- domain,请替换,从域名列表选择Topic所在region的域名 -->
  3. <property name="url" value="http://domain/message" />
  4. <!-- 阿里云身份验证码,请替换 -->
  5. <property name="accessKey" value="XXXXXX" />
  6. <!-- 阿里云身份验证密钥,请替换 -->
  7. <property name="secretKey" value="XXXXXX" />
  8. <!-- MQ控制台创建的Topic,请替换 -->
  9. <property name="topic" value="XXXXXX" />
  10. <!-- MQ控制台创建的Consumer ID,请替换 -->
  11. <property name="consumerId" value="XXXXXX" />
  12. </bean>


消息发送与接收 Demo



消息发送


运行 Demo 里的文件 TestHttpProducerApp.java ,该文件内容如下:
  1. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("producer/producer.xml");
  2. HttpMQProducer producer = context.getBean(HttpMQProducer.class);
  3. // 发送定时消息: producer.send("msg", "tag", "key", startDeliverTime);
  4. if (producer.send("msg", "tag", "key")) {
  5.     System.out.println("send message success");
  6. } else {
  7.     System.out.println("send message failed");
  8. }
  9. context.close();


消息接收



特别说明


如果消息没有其他端消费接入(比如使用C++ TCP,JAVA TCP),建议优先接入MNS,MNS专为多语言消息服务。 MNS接入文档
运行 Demo 里面的 TestHttpConsumerApp.java 文件,该文件内容如下:
  1. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer/consumer.xml");
  2. HttpMQConsumer consumer = context.getBean(HttpMQConsumer.class);
  3. List<SimpleMessage> list = consumer.pull();
  4. if (list != null && list.size() > 0) {
  5.     for (SimpleMessage simpleMessage : list) {
  6.         System.out.println(simpleMessage);
  7.         // 当消息处理成功后,需要进行delete,如果不及时delete将会导致重复消费此消息
  8.         String msgHandle = simpleMessage.getMsgHandle();
  9.         if (consumer.delete(msgHandle)) {
  10.             System.out.println("delete success: " + msgHandle);
  11.         } else {
  12.             System.out.println("delete failed: " + msgHandle);
  13.         }
  14.     }
  15. }
  16. context.close();

展开
收起
猫饭先生 2017-10-27 10:15:13 1811 分享 版权
阿里云 AI 助理回答

您提到的Demo似乎是关于如何使用阿里云的消息服务(例如消息队列MQ)通过HTTP协议进行消息发送与接收的示例代码。这里有几个关键步骤和注意事项,我将基于您的描述提供一些指导:

下载Demo

首先,确保您已经从阿里云官网或者相关GitHub仓库下载了适用于HTTP协议的Java Demo。通常,这类Demo会包括生产者(Producer)和消费者(Consumer)两端的示例代码。

导入工程

  • 使用Eclipse或IntelliJ IDEA等IDE导入下载的Demo项目。对于IDEA,如果遇到配置问题,可以参考IDEA的官方文档或社区提供的教程来正确配置Maven或Gradle项目。

修改配置文件

  1. producer.xml:这个文件位于src/main/resources/producer/producer.xml,需要根据您的阿里云账号信息进行修改。主要配置包括Endpoint(访问域名)、AccessKey、SecretKey等。确保这些信息与您在阿里云控制台创建的实例相匹配。

  2. consumer.xml:类似地,位于src/main/resources/consumer/consumer.xml,也需要根据实际情况调整。除了Endpoint、AccessKey、SecretKey外,可能还需要配置消费组ID等参数。

消息发送与接收Demo

消息发送

  • 通过运行TestHttpProducerApp.java,您可以发送消息到指定的主题(Topic)。确保在发送前,相应的Topic已经在阿里云MQ服务中创建好。

消息接收

  • 要接收消息,需运行TestHttpConsumerApp.java。这段代码展示了如何拉取(pull)消息。请注意,HTTP协议的消费模式通常为“轮询”模式,即客户端主动请求服务器检查是否有新消息,这与TCP协议下的长连接推送有所不同。

特别说明

  • 如果您的应用场景允许且希望实现更高效、实时的消息处理,阿里云推荐使用MNS(Message Service)或RocketMQ的TCP协议方式。MNS提供了多语言支持,更适合跨语言的微服务架构。具体接入文档可参照阿里云官方文档。

请确保在操作之前阅读并理解阿里云MQ或MNS的相关文档,特别是安全最佳实践,比如不要在代码中硬编码敏感信息如AccessKey和SecretKey,考虑使用环境变量或密钥管理服务来管理这些凭证。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答