为什么Node.js AWS-SDK在创build本地队列时返回了错误的SQS队列URL
我正在使用ElasticMQ在本地开发机器上模拟AWS SQS。 我在Docker容器中运行ElasticMQ,使用docker-osx-dev托pipeLinux VM上的Docker容器。 这意味着我访问虚拟机IP地址的本地ElasticMQ实例,而不是本地主机IP。
当我尝试使用下面的代码在EMQ中创build一个队列时,它会在localhost返回一个队列URL,而不是托pipedocker容器的虚拟机的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地址replaceURL中的“localhost”,我可以成功地访问这个URL的队列,表明它确实被创build了,但这是一个非常讨厌的黑客行为。 在上面的代码中需要更改什么来纠正这个问题?
您正面临的问题是ElasticMq正在公开所运行的容器的主机和端口。这是我之前遇到的一个问题,通过创build一个定制的Docker容器来修复它,让您以编程方式设置主机和端口。
我已经写了一篇关于如何解决这个问题的博客文章 ,但实质上你需要做的是:
- 使用我的自定义图像
tddmonkey/elasticmq
- 创build容器时设置
NODE_HOST
和NODE_PORT
环境variables。
最终你的命令行是这样的:
$ docker run -e NODE_HOST=`docker-machine ip default` -e NODE_PORT=8000 -p 8000:9324 tddmonkey/elasticmq