尝试使用com.amazonaws.services.sns Java模块将消息发送到AWS SNS主题时,出现以下错误:

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主题。

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 helper类的代码段,除了创建String dataType消息并将其与topicARN一起发送外,它什么都不做。

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内部抛出的。

最佳答案

找到了解决问题的办法。

AWS SNS主题具有固定的最大大小。因此,在发布大小大于最大大小的消息时,将导致invalidParameterException和消息“消息太长”。

我的留言超出了该大小,这就是错误的原因。我粉碎了消息,直到大小小于最大大小。

10-08 17:46