簡體   English   中英

為什么Node.js AWS-SDK在創建本地隊列時返回錯誤的SQS隊列URL

[英]Why is the Node.js AWS-SDK returning the wrong SQS queue URL when creating a local queue

我正在使用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文件。 如果您收到有關無效端點的錯誤消息,請嘗試使用連字符而不是下划線在compose文件中重命名容器(即http:// sqs_local:9324將失敗, http:// sqs-local:9324將會正常) 。

你面臨的問題是ElasticMq正在暴露它正在運行的容器的主機和端口。這是我之前遇到的一個問題,並通過創建一個自定義Docker容器來修復它,該容器允許您以編程方式設置主機和端口。

我寫了一篇關於如何修復它的博客文章 ,但實質上你需要做的是:

  • 使用我的自定義圖像tddmonkey/elasticmq
  • 在創建容器時設置NODE_HOSTNODE_PORT環境變量。

最終,您的命令行是:

$ docker run -e NODE_HOST=`docker-machine ip default` -e NODE_PORT=8000 -p 8000:9324 tddmonkey/elasticmq

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM