gpt4 book ai didi

amazon-web-services - 用于测试的 Amazon SNS 内联 Java 订阅

转载 作者:行者123 更新时间:2023-12-05 03:02:41 26 4
gpt4 key购买 nike

我想测试一个实时组件,它作为执行的结果在 SNS 主题中发送消息。

有没有办法使用 Java SDK 创建“内联”客户端订阅?

这行(伪代码):

@Test
public void testProcessingResult() throws Exception {
final Box<Object> resultBox = new Box();
snsClient.subscribe(new SubscribeRequest(topicArn,
msg -> resultBox.setValue(extractResult(msg))
));
...
httpClient.post(endpoint, params); // send the request
Thread.sleep(2000); // wait for eventual processing

assertEquals(expected, resultBox.getValue());
}

实现此目的的一种方法是创建一个 Amazon SQS 队列并向其注册测试客户端,然后通过轮询获取结果。

有没有更简单的方法?

最佳答案

正如我在问题中提到的,我已经创建了一个 SQS 队列并将其订阅到 SNS 主题。然后我可以检查事件是否已发布。

private String subscriptionArn;
private String queueUrl;

@BeforeEach
public void createAndRegisterQueue() {
queueUrl = sqs.createQueue("mytest-" + UUID.randomUUID()).getQueueUrl();
subscriptionArn = Topics.subscribeQueue(sns, sqs, TOPIC_ARN, queueUrl);
}

@AfterEach
public void deleteAndUnregisterQueue() {
sns.unsubscribe(subscriptionArn);
sqs.deleteQueue(queueUrl);
}

@Test
public void testEventPublish() throws Exception {
// request processing
Response response = httpClient.execute(new HttpRequest(ENDPOINT));
assertThat("Response must be successful.", response.statusCode(), is(200));

// wait for processing to be completed
Thread.sleep(5000);

// check results
Optional<String> published = sqs.receiveMessage(queueUrl).getMessages()
.stream()
.map(m -> new JSONObject(m.getBody()))
.filter(m -> m.getString("TopicArn").equals(TOPIC_ARN))
.map(m -> new JSONObject(m.getString("Message")))
// ... filter and map the expected result
.findAny();

assertThat("Must be published.", published.isPresent(), is(true));
}

如果在不创建额外资源(队列)的情况下没有更简单的解决方案,则此方法可以正常工作。

关于amazon-web-services - 用于测试的 Amazon SNS 内联 Java 订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54575715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com