使用 Java 1.6 通过 JMS 连接到 SQS

Posted

技术标签:

【中文标题】使用 Java 1.6 通过 JMS 连接到 SQS【英文标题】:Connecting to SQS with JMS using Java 1.6 【发布时间】:2015-12-17 21:03:33 【问题描述】:

在 Java 1.6 中使用 AWS 的 JMS SQSConnectionFactory 连接到 SQS 时出现“不支持的 major.minor 版本 51.0 错误”。它适用于 Java 1.7

我没有找到任何明确说明它与 1.6 不兼容的文档 有人管理过吗?有什么建议?

【问题讨论】:

【参考方案1】:

它看起来像是为 Java 7 编译的。

您可以下载源代码并为 Java 6 编译它。

https://github.com/awslabs/amazon-sqs-java-messaging-lib

您可能需要对源代码进行少量更改,例如从某些测试中删除菱形运算符 <>

当您打开上述页面时,README.md 中有最低要求,指定最低 java 版本为 7。

【讨论】:

【参考方案2】:

对于那些仍在寻找 Java 6 解决方案的人,这里有什么对我有用的 IBM Domino 9 服务器,它仍然使用 Java 6 运行。 希望它可以帮助您走得更远。

我从 maven repository 下载了一个旧的 sdk 版本 1.11.664(及其依赖项)。

将jar文件放到/jvm/lib/ext文件夹:

joda-time-2.8.1.jar httpcore-4.4.11.jar httpclient-4.5.9.jar aws-java-sdk-sqs-1.11.664.jar aws-java-sdk-1.11.664.jar aws-java-sdk-core-1.11.664.jar jmespath-java-1.11.664.jar

在 java.policy 文件末尾添加权限:

授予 权限 java.lang.RuntimePermission "getenv.AWS_PROFILE"; 权限 java.lang.RuntimePermission "getenv.HTTPS_PROXY"; 权限 java.lang.RuntimePermission "getenv.https_proxy"; 权限 java.lang.RuntimePermission "getenv.AWS_CSM_ENABLED"; ;

示例代码如下(删除了一些供应商特定的部分):

package com.javasix.awssqs;
 
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import com.amazonaws.services.sqs.model.Message;
import com.amazonaws.services.sqs.model.SendMessageRequest;
 
import java.util.List;
 
public class SendRecieveMessages 
      private static final String ACCESS_KEY_ID = "ACCESS_KEY_ID";
      private static final String SECRET_ACCESS_KEY = "SECRET_ACCESS_KEY";
      private static final String QUEUE_NAME = "QUEUE_URL";
 
      public static void main(String[] args) 
 
            BasicAWSCredentials awsCreds = new BasicAWSCredentials(ACCESS_KEY_ID,
                        SECRET_ACCESS_KEY);
 
            final AmazonSQS sqs = AmazonSQSClientBuilder.standard().withRegion(
                        Regions.US_EAST_1).withCredentials(
                        new AWSStaticCredentialsProvider(awsCreds)).build();
 
            // Send message
            String message = "Java 6 test message";
            SendMessageRequest sendMessageStandardQueue = new SendMessageRequest()
                        .withQueueUrl(QUEUE_NAME).withMessageBody(message)
                        .withDelaySeconds(5);
            sqs.sendMessage(sendMessageStandardQueue);
 
            // receive messages from the queue
            List<Message> messages = sqs.receiveMessage(QUEUE_NAME).getMessages();
 
            for (Message m : messages) 
                  // Do something with your message here
 
                  // delete messages from the queue
                  sqs.deleteMessage(QUEUE_NAME, m.getReceiptHandle());
            
      

这让我可以连接到 AWS SQS。

【讨论】:

以上是关于使用 Java 1.6 通过 JMS 连接到 SQS的主要内容,如果未能解决你的问题,请参考以下文章

将 Java 客户端 (JMS) 连接到 IBM MQ 时出现问题

使用 JMS 连接到 IBM MQ

将远程 JMS 客户端连接到 GlassFish 3

如何从运行在 WebSphere 应用程序服务器 v7 上的 Web 应用程序通过 JMS 连接到 Web 方法?

5000 毫秒后无法连接到代理 URL [JMS]

Spring JMS - 无法使用嵌入式代理连接到代理 URL