我正在使用ElasticMQ在我的本地开发机器上模拟AWS SQS。我在Docker容器中运行ElasticMQ,使用docker-osx-dev在Linux VM上托管Docker容器。这意味着我在VM的IP上访问本地ElasticMQ实例,而不是我的localhost IP。
当我尝试使用下面的代码在EMQ中创建队列时,它会返回localhost处的队列URL,而不是托管docker容器的VM的IP。
var AWS = require('aws-sdk');
var config = {
endpoint: new AWS.Endpoint('http://192.168.59.103:9324'),
accessKeyId: 'na',
secretAccessKey: 'na',
region: 'us-west-2'
}
var sqs = new AWS.SQS(config);
var params = {
QueueName: 'test_queue'
};
sqs.createQueue(params, function(err, data) {
if (err) {
console.log(err);
} else {
console.log(data.QueueUrl);
}
});
目前此代码返回http://localhost:9324/queue/test_queue
,但应返回http://192.168.59.103:9324/queue/test_queue
。如果我用实际IP地址替换URL中的'localhost',我可以成功访问具有该URL的队列,表明它确实已创建,但这是一个非常讨厌的黑客。我需要在上面的代码中更改哪些内容才能解决此问题?
更新:端点无效 在使用ElasticMQ模拟容器出现另一个问题之后,我又回到了这个问题。这次它是docker-compose文件的一部分,另一个容器通过它的docker主机名访问它。 SQS不接受带有下划线的主机名。由于下划线很常见,因此大多数人都会使用docker-compose文件。如果您收到有关无效端点的错误消息,请尝试使用连字符而不是下划线在撰写文件中重命名容器(即http://sqs_local:9324将失败,http://sqs-local:9324将没问题。)
答案 0 :(得分:1)
您面临的问题是ElasticMq正在暴露其正在运行的容器的主机和端口。这是我之前遇到过的问题,并通过创建自定义Docker来修复它允许您以编程方式设置主机和端口的容器。
我已经写了blog post如何修复它,但实质上你需要做的是:
declare Steps
@role(event)
end
rule "STEPS RULE"
when
$totalSteps : Number( doubleValue < 50 ) from accumulate(
Steps( stepsCount : steps ) over window:time( 1h ) from entry-point
"entrySteps", sum( stepsCount ) )
then
System.out.println("STEPS RULE: get moving!");
end
tddmonkey/elasticmq
和NODE_HOST
环境变量。 最终,您的命令行是:
NODE_PORT