首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >InvalidParameterException on SNS topic using java

InvalidParameterException on SNS topic using java
EN

Stack Overflow用户
提问于 2019-02-27 19:42:32
回答 1查看 1.5K关注 0票数 2

在尝试使用com.amazonaws.services.sns java模块向AWS主题发送消息时,我遇到以下错误:

代码语言:javascript
运行
复制
shaded.com.amazonaws.services.sns.model.InvalidParameterException: Invalid parameter: Message too long (Service: AmazonSNS; Status Code: 400; Error Code: InvalidParameter; Request ID: 3b01ce49-a37d-5aba-bec2-9ab9d5446aea)
at shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1587)
at shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1257)
at shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1029)
at shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:741)
at shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:715)
at shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:697)
at shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:665)
at shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:647)
at shaded.com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:511)
at shaded.com.amazonaws.services.sns.AmazonSNSClient.doInvoke(AmazonSNSClient.java:2270)
at shaded.com.amazonaws.services.sns.AmazonSNSClient.invoke(AmazonSNSClient.java:2246)
at shaded.com.amazonaws.services.sns.AmazonSNSClient.executePublish(AmazonSNSClient.java:1698)
at shaded.com.amazonaws.services.sns.AmazonSNSClient.publish(AmazonSNSClient.java:1675)

下面是AmazonSNS帮助器类。这个类管理客户端的创建和将消息发布到SNS主题。

代码语言:javascript
运行
复制
import java.io.Serializable;

import com.amazonaws.services.sns.AmazonSNS;
import com.amazonaws.services.sns.AmazonSNSClientBuilder;
import com.amazonaws.services.sns.model.PublishRequest;
import com.amazonaws.services.sns.model.PublishResult;

public class AWSSNS implements Serializable {

private static final long serialVersionUID = -4175291946259141176L;
protected AmazonSNS client;

public AWSSNS(){
    this.client=AmazonSNSClientBuilder.standard().withRegion("us-west-2").build();
}

public AWSSNS(AmazonSNS client) { 
    this.client=client;
}

public AmazonSNS getSnsClient(){
    return this.client;
}

public void setSqsClient(AmazonSNS client){
    this.client = client;
}

public boolean sendMessages(String topicArn, String messageBody){

    PublishRequest publishRequest = new PublishRequest(topicArn, messageBody);
    PublishResult publishResult = this.client.publish(publishRequest);

    if(publishResult != null && publishResult.getMessageId() != null){
        return true;
    }
    else{
        return false;
    }
}
}

以下是amazonSNS帮助器类所在位置的代码片段,called.It除了创建字符串为dataType的消息并将其与topicARN一起发送之外,什么也不做。

代码语言:javascript
运行
复制
HashMap<String, String> variable_a = new HashMap<String, String>();
Gson gson = new Gson();

for (Object_a revoke : Object_a) {
    Object_a operation = someMethod1(revoke);
    String serializedOperation = gson.toJson(operation);

    variable_a.put(revoke.someMethod2(), serializedOperation);
    String message = gson.toJson(variable_a);

    LOG.info(String.format("SNS message: %s", message));
    this.awsSNS.sendMessages(topicARN, message);
}

所以基本上这个错误是从sendMessage内部抛出的。

EN

回答 1

Stack Overflow用户

发布于 2019-02-27 21:42:50

找到了问题的解决方案。

AWS SNS主题有固定的最大大小。因此,在发布大于最大大小的消息时,将导致消息"message too long“的invalidParameterException。

我的消息比这个大小更大,这就是错误的原因。我将邮件切碎,直到大小小于最大大小。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54904691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档