我对AWS SQS服务比较陌生。我编写了一些代码来包装Amazon SQS API。
我能够使用创建的队列执行基本功能,但尽管如此(事实上,我一直在使用这段代码,没有任何问题,并且我创建JUnit测试是作为一种形式),我的JUnit测试失败了,因为一个对我来说毫无意义的错误。
我已经使用AWS管理控制台创建了一个名为SerenaQForTest的队列。当我查看AWS控制台时,我可以看到我创建的队列已经列出。我已经在队列上设置了为每个人打开的权限。我在用Java编程。
当我尝试与队列交互时,我得到一个AmazonServiceException,错误代码为aws.SimpleQueueService.NonExistentQueueError。
这是我的代码。
/**
* Prefix for queues used to run junit tests.
*/
private static final String TESTQ = "SerenaForTest";
/**
* Ensures that the queue exists.
*/
@Test
public void testExists() {
System.out.println("JUnit Test EXISTS.");
CloudSQS cloudsqs = new CloudSQS();
// this queue does exist and i can see it through the aws management console in sqs
assertTrue(cloudsqs.exists(TESTQ));
// this queue does not exist.
assertTrue(cloudsqs.exists("thisQDoesNotExist") == false);
}
/**
* Determines if the queue exists or not.
*
* @param qName
* , name of the queue to determine existence of.
* @return boolean, true if the queue exists; false otherwise.
*/
public boolean exists(final String qName) {
boolean retVal = false;
try {
// create a request for the url of qName
GetQueueUrlRequest getQueueUrlRequest = new GetQueueUrlRequest(qName);
String addy = sqs.getQueueUrl(getQueueUrlRequest).getQueueUrl();
System.out.println(qName + " url : " + addy);
if (addy != null) {
// get all queues on sqs
ListQueuesResult queues = sqs.listQueues();
// for each url,
for (String url : queues.getQueueUrls()) {
// System.out.println("Comparing " + addy + " and " + url);
if (url.equalsIgnoreCase(addy)) {
System.out.println("Queue exists.");
retVal = true;
break;
}
}
} else {
System.out.println("Queue " + qName + " does not exist.");
}
} catch (AmazonServiceException ase) {
System.err.println("ERR: AmazonServiceException. Error code: " + ase.getErrorCode());
} catch (AmazonClientException ace) {
System.err.println("ERR: AmazonClientException.");
ace.printStackTrace();
} catch (Exception e) {
System.err.println("ERR: Regular Old Error.");
e.printStackTrace();
}
return retVal;
}
JUnit测试存在。SerenaForTest url:https://sqs.us-west-2.amazonaws.com/079023477467/SerenaForTest队列存在。错误:AmazonServiceException。错误代码:AWS.SimpleQueueService.NonExistentQueue
下面是StackTrace:
从这一点上,您可以看到函数能够抓取队列URL,并且找到了匹配项。但它仍然会抛出一个异常。
您确定您创建的队列与您的Java SQS客户机要到达的区域相同吗?AWS SDK for Java中的默认区域是US-EAST-1。您可以通过查看右上方的管理控制台来验证队列的区域。
我有一个不断运行的lambda函数和一些动态创建的SQS队列。我需要一种允许lambda访问所有SQS队列的方法,以便可以使用这些动态创建的队列-我如何做到这一点? 目前,我使用的执行角色具有iam策略和单个队列ARN,但似乎无法创建多个执行角色。
我们现有的服务使用子队列的概念,这样用户就不会接收到不是为他们准备的消息。例如: /MyQueueName/user1/ /MyQueueName/user2/ SQS似乎不具备创建子队列的能力,也不具备在消息属性上进行筛选的灵活性。我可以允许所有的消息发送到所有的计算机,然后只有在内容相关的情况下才采取行动,但这似乎是浪费,特别是考虑到我们正在谈论的区域2万+子队列目前。 如何在SQS上最好地实
我们正在使用AMAZON SQS FIFO队列来处理我们应用程序的预约服务。一旦消息进入队列,它就会触发Amazon Lambda函数来管理预订过程。因为它是一个FIFO队列,所以我们确保如果有2个人请求相同的插槽,那么这个插槽将给第一个请求者。我的问题是:是否有一种方法(也许是SQS FIFO队列中的设置?)这确保了在前一条消息执行完毕之前,一条消息不会触发Amazon Lambda函数。我只是
我有一个IAM用户的策略,该策略是为从特定SQS队列发送和接收消息而创建的。当使用AWS CLI并发出命令时,会出现错误: 我认为应该只返回IAM用户被授予该操作的队列,这是不是错了? 欢迎任何指导/建议!谢了!
我已将FIFO队列作为目标添加到我们的自定义事件总线中。 当eventbridge连接到FIO队列时,需要MessageGroupId属性。 是否可以动态配置该值? 例如:我有一个FIFO队列,我把来自不同用户的事件。每个事件,在细节属性内,有一个属性uuid与用户标识符。我想使用这个属性,而不是e常量值作为MessageGroupId。这样,同一用户的所有事件都将按顺序处理。 谢谢你!