Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用JMeter加载/测试AmazonSQS-并非所有消息都能通过_Amazon Web Services_Jmeter_Amazon Sqs - Fatal编程技术网

Amazon web services 使用JMeter加载/测试AmazonSQS-并非所有消息都能通过

Amazon web services 使用JMeter加载/测试AmazonSQS-并非所有消息都能通过,amazon-web-services,jmeter,amazon-sqs,Amazon Web Services,Jmeter,Amazon Sqs,我正在尝试加载消息并测试我的AWS部署的应用程序,它通过SQS接收消息,我一直在尝试让JMeter这样做,但是我无法让JMeter与SQS正确通信 首先,我已将SQS设置为匿名访问,因此我根本不必担心凭据: { "Version": "2012-10-17", "Id": "arn:aws:sqs:us-east-1:843348267853:testQueue/SQSDefaultPolicy", "Statement": [ { "Sid": "Sid1445

我正在尝试加载消息并测试我的AWS部署的应用程序,它通过SQS接收消息,我一直在尝试让JMeter这样做,但是我无法让JMeter与SQS正确通信

首先,我已将SQS设置为匿名访问,因此我根本不必担心凭据:

{
  "Version": "2012-10-17",
  "Id": "arn:aws:sqs:us-east-1:843348267853:testQueue/SQSDefaultPolicy",
  "Statement": [
    {
      "Sid": "Sid1445050222773",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "SQS:*",
      "Resource": "arn:aws:sqs:us-east-1:843348267853:testQueue"
    }
  ]
}
简单来说,我在Ubuntu机器上使用JMeterGUI,创建了一个线程组、一个HTTP默认值和一个HTTP请求

我的默认设置具有以下属性:

服务器名称:sqs.us-east-1.amazonaws.com 端口号:80 参数:Action=SendMessage 版本=2011-10-01 路径:/843348267853/testQueue

然后,我的HTTP请求具有以下属性: 方法:邮寄 参数: MessageBody={发件人:发件人,事件:已启动,时间:20150623T214256Z,版本:1.0 }

注意:我没有检查编码?框中的任何参数

我的期望是,它将把缺省值中的参数与请求中的参数组合在一起,但是按照上面的格式,它会抛出

org.apache.http.conn.ConnectTimeoutException:连接到sqs.us-east-1.amazonaws.com:80超时

如果我将JSON消息用单引号括起来,它会抛出:

java.net.SocketTimeoutException:读取超时

我已经更改了“将多部分/表单数据用于POST和浏览器兼容的标题”设置,当我检查“查看结果”树中的“请求”选项卡时,它显示为:

职位

发布数据: MessageBody=%7B%22发件人%22%3A%22发件人%22%2C%22事件%22%3A%22已开始%22%2C%22时间%22%3A%2220150623T214256Z%22%2C%22版本%22%3A%221.0%22%7D&Action=sendmages&Version=2011-10-01

[没有饼干]

请求标头: 连接:保持活力 内容类型:application/x-www-form-urlencoded

我假设SQS不喜欢URL编码

我尝试过设置各种内容类型的标题、转义引号等,但都不起作用

我假设这与SQS需要key=value格式有关,而我的应用程序Logstash和Elasticsearch都配置为使用JSON,因此JSON需要嵌入其中

我已经看过了,没有具体的信息可供使用。我还希望不必编写自己的应用程序并扩展JMeter

有人知道我如何使用JMeterGUI来实现这一点吗

编辑1 在我试图让JMeter正确地向Amazon SQS发送消息的过程中,Logstash对Amazon SQS进行了轮询,Logstash将消息发送给Elasticsearch。我停止检查Elasticsearch以查看消息是否到达,原因很简单,因为JMeter报告了一个故障,消息最初没有被接收到

我只是再次检查了它,发现了我当前的JMeter配置,而在JMeter中报告失败,似乎实际上是将消息发送到SQS。新的问题是,并不是所有的信息都能通过。如果JMeter报告它尝试了1000次,看起来有100次通过了

HTTP请求默认值 -相同的参数、路径、服务器名称 -实现:HttpClient 4 -协议:http

HTTP请求采样器 -消息体的参数,格式正确的JSON不被任何附加字符包围,且不转义。 -方法:邮寄

所以,我的新问题是,为什么不是所有的信息都能通过呢?也许它为了自身的利益而移动得太快了,而且它实际上并没有传递它所说的所有信息

我已经将线程组设置为5个线程,但是我选择它应该延迟线程创建,直到需要时为止。也许是因为内部种族问题

为了验证这一理论,我插入了一个常量计时器来增加1秒的延迟,并且在每个请求之间再加上2秒的延迟应该足够长的时间,让它运行143条消息。在这143条信息中,只有7条通过了

然后,我在表中的视图结果中注意到,除少数消息外,所有消息的字节数均为2152,连接时间为0,而每几条消息的字节数均为2583,连接时间为11ms或12ms。与所有其他邮件不同的邮件数是成功通过的邮件数

JMeter报告通过的消息的响应代码/消息,如下所示:

Response code: Non HTTP response code: java.net.SocketTimeoutException
Response message: Non HTTP response message: Read timed out
鉴于其报告了所有其他未通过的邮件的以下内容:

Response code: Non HTTP response code: org.apache.http.conn.ConnectTimeoutException
Response message: Non HTTP response message: Connect to sqs.us-east-1.amazonaws.com:80 timed out

JMeter非常支持测试消息传递系统的JMS接口。您可以使用获取SQS JMS接口。

您能否提供有关哪些不起作用的更多信息 -jmeter.log -你得到的回应

从您显示的内容来看,您似乎没有发送**请求签名**:

要进行此签名,可以使用JSR223准备
Processor+Groovy+JavaAPI。

我希望不必编写自己的应用程序。GUI可以使用Java编写的自定义采样器类吗?使用JMeter不必编写自己的应用程序。由于JMeter已经支持JMS,因此可以使用AWS SDK中提供的JMS接口创建性能测试。您只需要定义测试应该如何运行。我的理解是,根据我当前的访问策略,它应该允许匿名访问,即不需要签名。无论如何,我在另一个问题上有了另一个发现,我正在相应地更新我的问题。