golangのmqttクライアントでCloudMQTTにSSL接続するコード
前提・実現したいこと
LINEからのメッセージをトリガにして、LEDを点灯させるプログラムに挑戦しています。
発生している問題・エラーメッセージ
goで作成したプログラムを、デプロイした後、通信エラーが発生して困っています。
heroku logs --tailで取得したエラーの内容は次の通りです。
"crashed"が発生しています。
html
12019-02-27T12:19:34.034460+00:00 heroku[web.1]: C:\Users\nagata\go\src\applinane>heroku logs --tail 22019-02-27T12:11:48.715153+00:00 app[api]: Enable Logplex by user xxx@yyy 32019-02-27T12:11:48.467341+00:00 app[api]: Release v1 created by user xxx@yyy 42019-02-27T12:11:48.467341+00:00 app[api]: Initial release by user xxx@yyy 52019-02-27T12:11:48.715153+00:00 app[api]: Release v2 created by user xxx@yyy 62019-02-27T12:12:02.405260+00:00 app[api]: Release v3 created by user xxx@yyy 72019-02-27T12:12:02.405260+00:00 app[api]: Set CHANNEL_SECRET config vars by user xxx@yyy 82019-02-27T12:12:18.790510+00:00 app[api]: Release v4 created by user xxx@yyy 92019-02-27T12:12:18.790510+00:00 app[api]: Set CHANNEL_TOKEN config vars by user xxx@yyy 102019-02-27T12:12:40.449883+00:00 app[api]: @ref:cloudmqtt-concave-93011 completed provisioning, setting CLOUDMQTT_APIKEY, CLOUDMQTT_URL. by user xxx@yyy 112019-02-27T12:12:40.433307+00:00 app[api]: Attach CLOUDMQTT (@ref:cloudmqtt-concave-93011) by user xxx@yyy 122019-02-27T12:12:40.433307+00:00 app[api]: Running release v5 commands by user xxx@yyy 132019-02-27T12:12:40.449883+00:00 app[api]: Release v6 created by user xxx@yyy 142019-02-27T12:16:47.670797+00:00 app[api]: Set CLOUDMQTT_URL config vars by user xxx@yyy 152019-02-27T12:16:47.670797+00:00 app[api]: Release v7 created by user xxx@yyy 162019-02-27T12:16:55.988884+00:00 app[api]: Set CLOUDMQTT_URL config vars by user xxx@yyy 172019-02-27T12:16:55.988884+00:00 app[api]: Release v8 created by user xxx@yyy 182019-02-27T12:19:14.000000+00:00 app[api]: Build started by user xxx@yyy 192019-02-27T12:19:28.771183+00:00 heroku[web.1]: Starting process with command `applinane` 202019-02-27T12:19:30.970012+00:00 heroku[web.1]: State changed from starting to crashed 212019-02-27T12:19:30.982047+00:00 heroku[web.1]: State changed from crashed to starting 222019-02-27T12:19:30.949762+00:00 heroku[web.1]: Process exited with status 1 232019-02-27T12:19:30.873884+00:00 app[web.1]: 2019/02/27 12:19:30 missing channel secret 242019-02-27T12:19:31.600270+00:00 heroku[web.1]: Starting process with command `applinane` 252019-02-27T12:19:28.004732+00:00 app[api]: Deploy 0da44f23 by user xxx@yyy 262019-02-27T12:19:28.004732+00:00 app[api]: Release v9 created by user xxx@yyy 272019-02-27T12:19:28.021813+00:00 app[api]: Scaled to web@1:Free by user xxx@yyy 282019-02-27T12:19:34.034460+00:00 heroku[web.1]: State changed from starting to crashed 292019-02-27T12:19:33.958522+00:00 app[web.1]: 2019/02/27 12:19:33 missing channel secret 302019-02-27T12:19:34.020119+00:00 heroku[web.1]: Process exited with status 1 312019-02-27T12:19:47.000000+00:00 app[api]: Build succeeded 322019-02-27T12:21:45.611915+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=POST path="/callback" host=applinane.herokuapp.com request_id=6a3f6 33501-52a1-4aef-831a-7dfe9231cfde fwd="203.104.146.155" dyno= connect= service= status=503 bytes= protocol=https 342019-02-27T12:19:33.958522+00:00 app[web.1]: 2019/02/27 12:19:33 missing channel secret
問題が発生するまでの流れ・手順
デプロイが完了するまでの手順を記載します。
通信ログからもデプロイが完了していると考えているので、"crashed"の原因は、goプログラムの内容にあると考えました。
html
1$ GoPath>cd src 2$ mkdir appli 3$ cd appli 4$ echo web: appli > Procfile 5$ git init 6$ git add . 7$ git commit -m "first commit" 8 9$ heroku login 10$ heroku create appli -b https://github.com/heroku/heroku-buildpack-go.git 11$ heroku config:set --app appli CHANNEL_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 12$ heroku config:set --app appli CHANNEL_TOKEN="yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" 13$ heroku addons:add --app appli cloudmqtt 14$ heroku config:set --app appli CLOUDMQTT_URL=" xxxxxxx@m16.cloudmqtt.com:25412" 15//SSLポートに変更しています。 16 17$ godep save 18& godep go install 19$ git add . 20$ git commit -m "second commit" 21$ git push heroku master
ソースコード
次のサイトを参照しながら、goで記述しています。
参照先: https://www.cloudmqtt.com/docs-go.html
ClientOptionを設定する部分の記述の仕方が分かりません。
herokuで設定した環境変数を設定しなければならないと思っていますが、↓のコードにどのように反映させればよいのかが分かりません。初歩的な質問かもしれませんが、ここの記述の例を示していただけると助かります。
html
1func createClientOptions(clientId string, uri *url.URL) *mqtt.ClientOptions { 2 opts := mqtt.NewClientOptions() 3 opts.AddBroker(fmt.Sprintf("tcp://%s", uri.Host)) 4 opts.SetUsername(uri.User.Username()) 5 password, _ := uri.User.Password() 6 opts.SetPassword(password) 7 opts.SetClientID(clientId) 8 return opts 9}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。