使用 Jmeter 的 HTTP 请求将记录放入 Amazon Kinesis [英] Using HTTP Request of Jmeter to put records into Amazon Kinesis

查看:19
本文介绍了使用 Jmeter 的 HTTP 请求将记录放入 Amazon Kinesis的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 jmeter 为我的网络服务 REST 创建 HTTP 请求.现在我想使用 PutRecords 方法将此请求发送到 Amazon kinesis,但我不知道如何创建请求,特别是如何在 kinesis 中设置用于签名和身份验证的 Headers 字段.有人使用过 Rest 请求吗?谢谢

I use jmeter to create HTTP request for my webservice REST. Now i want to send this request to Amazon kinesis using PutRecords method but i don't know hot to create the request, in particular how to set Headers fields for Signing and Authenticating in kinesis. Has someone used Rest request? thanks

推荐答案

这个问题很老了,我不记得所有了,但如果有人需要,这是代码:BeanShell 采样器

This question is old and I don't remember all but this is the code if someone need it: BeanShell Sampler

import org.MyKinesisClient;

//Create a controller object every time Jmeter starts 
MyKinesisClient controller=new MyKinesisClient(vars.get("accessKey"),vars.get("secretKey"),vars.get("endpoint"),vars.get("serviceName"),vars.get("regionId"));
bsh.shared.controller=controller;

这是最后的代码:

import com.amazonaws.util.json.JSONArray;
import com.amazonaws.util.json.JSONObject;
import org.MyKinesisClient;

//Variables
int timestampValue=(${i});
String idValue=${__threadNum}+"_"+"1";
JSONObject part = new JSONObject();

//Inserimento campi Json
part.put("updated",timestampValue);
part.put("parent","${__threadNum}");
part.put("id",idValue);
part.put("thingClass","CosyInverter");
part.put("mac_address_w","${mac_address_w_1}");
//Other put
.... 

//Send Json to kinesis
MyKinesisClient controller=bsh.shared.controller;
controller.sendJson(part, ${__Random(0,${__threadNum})},vars.get("streamName"));

我的代码比上面的更复杂(数据库查询等...)但我希望这是你需要的.

My code is more complicated than that above (database query etc...) but I hope this is what you need.

这是MyKinesisClient的java代码

This is the java code about MyKinesisClient

import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.kinesis.AmazonKinesisClient;
import com.amazonaws.services.kinesis.model.PutRecordRequest;
import com.amazonaws.services.kinesis.model.PutRecordsRequest;
import com.amazonaws.services.kinesis.model.PutRecordsRequestEntry;
import com.amazonaws.util.json.JSONArray;
import com.amazonaws.util.json.JSONException;
import com.amazonaws.util.json.JSONObject;

/**
 * Class useful to send Json to Amazon Kinesis.
 * @author l.calicchio
 *
 */
public class MyKinesisClient {
    private AmazonKinesisClient kinesisClient;

    /**
     * Class constructor. Allow all parameter setting
     * @param accessKey: access key for kinesis connection
     * @param secretKey: secret key for kinesis connection
     * @param endpoint: Kinesis endpoint 
     * @param serviceName: Amazon service name
     * @param regionId: region id of kinesis endpoint 
     */
    public MyKinesisClient(String accessKey, String secretKey, String endpoint, String serviceName, String regionId ) {
        AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
        kinesisClient = new AmazonKinesisClient(credentials);
        kinesisClient.setEndpoint(endpoint,serviceName,regionId);
    }

    /**
     * Method useful to send the json to Kinesis
     * @param json: com.amazonaws.util.json.JSONObject to be sent
     * @param partitionKey: partition key for Kinesis stream 
     * @param streamName: name of Kinesis stream 
     * @throws UnsupportedEncodingException
     * @throws JSONException
     */
    public void sendJson(JSONObject json, int partitionKey, String streamName) throws UnsupportedEncodingException, JSONException {
        try{
        PutRecordRequest putRecordRequest = new PutRecordRequest();
        putRecordRequest.setStreamName(streamName);
        putRecordRequest.setData(ByteBuffer.wrap(json.toString().getBytes("utf-8")));
        putRecordRequest.setPartitionKey(String.format("partitionKey-%d", partitionKey));
        kinesisClient.putRecord(putRecordRequest);
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }   

    /**
     * Method useful to send the json Array to Kinesis
     * @param json: com.amazonaws.util.json.JSONObject Array to be sent
     * @param partitionKey: partition key for Kinesis stream
     * @param streamName: Kinesis stream name
     */
    public void sendJsonArray(JSONArray json,int partitionKey, String streamName) {
        try{
        PutRecordsRequest putRecordsRequest = new PutRecordsRequest();
        putRecordsRequest.setStreamName(streamName);            
        List <PutRecordsRequestEntry> putRecordsRequestEntryList  = new ArrayList<PutRecordsRequestEntry>();
        for(int i=0;i<json.length();i++){           
            PutRecordsRequestEntry putRecordsRequestEntry  = new PutRecordsRequestEntry();
            putRecordsRequestEntry.setData(ByteBuffer.wrap(json.getJSONObject(i).toString().getBytes("utf-8")));
            putRecordsRequestEntry.setPartitionKey(String.format("partitionKey-%d", partitionKey));
            putRecordsRequestEntryList.add(putRecordsRequestEntry); 
        }
        putRecordsRequest.setRecords(putRecordsRequestEntryList);
        kinesisClient.putRecords(putRecordsRequest);
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}

这篇关于使用 Jmeter 的 HTTP 请求将记录放入 Amazon Kinesis的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆