使用 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 时出现问题