質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.49%

golangのmqttクライアントでCloudMQTTにSSL接続するコード

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,315

score 107

golangのmqttクライアントでCloudMQTTにSSL接続するコード

前提・実現したいこと
LINEからのメッセージをトリガにして、LEDを点灯させるプログラムに挑戦しています。

発生している問題・エラーメッセージ
goで作成したプログラムを、デプロイした後、通信エラーが発生して困っています。
heroku logs --tailで取得したエラーの内容は次の通りです。
"crashed"が発生しています。

2019-02-27T12:19:34.034460+00:00 heroku[web.1]: C:\Users\nagata\go\src\applinane>heroku logs --tail
2019-02-27T12:11:48.715153+00:00 app[api]: Enable Logplex by user xxx@yyy
2019-02-27T12:11:48.467341+00:00 app[api]: Release v1 created by user xxx@yyy
2019-02-27T12:11:48.467341+00:00 app[api]: Initial release by user xxx@yyy
2019-02-27T12:11:48.715153+00:00 app[api]: Release v2 created by user xxx@yyy
2019-02-27T12:12:02.405260+00:00 app[api]: Release v3 created by user xxx@yyy
2019-02-27T12:12:02.405260+00:00 app[api]: Set CHANNEL_SECRET config vars by user xxx@yyy
2019-02-27T12:12:18.790510+00:00 app[api]: Release v4 created by user xxx@yyy
2019-02-27T12:12:18.790510+00:00 app[api]: Set CHANNEL_TOKEN config vars by user xxx@yyy
2019-02-27T12:12:40.449883+00:00 app[api]: @ref:cloudmqtt-concave-93011 completed provisioning, setting CLOUDMQTT_APIKEY, CLOUDMQTT_URL. by user xxx@yyy
2019-02-27T12:12:40.433307+00:00 app[api]: Attach CLOUDMQTT (@ref:cloudmqtt-concave-93011) by user xxx@yyy
2019-02-27T12:12:40.433307+00:00 app[api]: Running release v5 commands by user xxx@yyy
2019-02-27T12:12:40.449883+00:00 app[api]: Release v6 created by user xxx@yyy
2019-02-27T12:16:47.670797+00:00 app[api]: Set CLOUDMQTT_URL config vars by user xxx@yyy
2019-02-27T12:16:47.670797+00:00 app[api]: Release v7 created by user xxx@yyy
2019-02-27T12:16:55.988884+00:00 app[api]: Set CLOUDMQTT_URL config vars by user xxx@yyy
2019-02-27T12:16:55.988884+00:00 app[api]: Release v8 created by user xxx@yyy
2019-02-27T12:19:14.000000+00:00 app[api]: Build started by user xxx@yyy
2019-02-27T12:19:28.771183+00:00 heroku[web.1]: Starting process with command `applinane`
2019-02-27T12:19:30.970012+00:00 heroku[web.1]: State changed from starting to crashed
2019-02-27T12:19:30.982047+00:00 heroku[web.1]: State changed from crashed to starting
2019-02-27T12:19:30.949762+00:00 heroku[web.1]: Process exited with status 1
2019-02-27T12:19:30.873884+00:00 app[web.1]: 2019/02/27 12:19:30 missing channel secret
2019-02-27T12:19:31.600270+00:00 heroku[web.1]: Starting process with command `applinane`
2019-02-27T12:19:28.004732+00:00 app[api]: Deploy 0da44f23 by user xxx@yyy
2019-02-27T12:19:28.004732+00:00 app[api]: Release v9 created by user xxx@yyy
2019-02-27T12:19:28.021813+00:00 app[api]: Scaled to web@1:Free by user xxx@yyy
2019-02-27T12:19:34.034460+00:00 heroku[web.1]: State changed from starting to crashed
2019-02-27T12:19:33.958522+00:00 app[web.1]: 2019/02/27 12:19:33 missing channel secret
2019-02-27T12:19:34.020119+00:00 heroku[web.1]: Process exited with status 1
2019-02-27T12:19:47.000000+00:00 app[api]: Build succeeded
2019-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
501-52a1-4aef-831a-7dfe9231cfde fwd="203.104.146.155" dyno= connect= service= status=503 bytes= protocol=https
2019-02-27T12:19:33.958522+00:00 app[web.1]: 2019/02/27 12:19:33 missing channel secret

問題が発生するまでの流れ・手順
デプロイが完了するまでの手順を記載します。
通信ログからもデプロイが完了していると考えているので、"crashed"の原因は、goプログラムの内容にあると考えました。

$ GoPath>cd src
$ mkdir appli
$ cd appli
$ echo web: appli > Procfile
$ git init
$ git add .
$ git commit -m "first commit"

$ heroku login
$ heroku create appli -b https://github.com/heroku/heroku-buildpack-go.git
$ heroku config:set --app appli CHANNEL_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
$ heroku config:set --app appli CHANNEL_TOKEN="yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
$ heroku addons:add --app appli cloudmqtt
$ heroku config:set --app appli CLOUDMQTT_URL=" xxxxxxx@m16.cloudmqtt.com:25412"
//SSLポートに変更しています。

$ godep save
& godep go install
$ git add .
$ git commit -m "second commit"
$ git push heroku master


ソースコード
次のサイトを参照しながら、goで記述しています。
参照先: https://www.cloudmqtt.com/docs-go.html

ClientOptionを設定する部分の記述の仕方が分かりません。
herokuで設定した環境変数を設定しなければならないと思っていますが、↓のコードにどのように反映させればよいのかが分かりません。初歩的な質問かもしれませんが、ここの記述の例を示していただけると助かります。

イメージ説明

func createClientOptions(clientId string, uri *url.URL) *mqtt.ClientOptions {
    opts := mqtt.NewClientOptions()
    opts.AddBroker(fmt.Sprintf("tcp://%s", uri.Host))
    opts.SetUsername(uri.User.Username())
    password, _ := uri.User.Password()
    opts.SetPassword(password)
    opts.SetClientID(clientId)
    return opts
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

crashの原因は、goプログラムの作成~Herokuへのデプロイの手順によるものでした。
別の方法でデプロイまで行った結果、crashが無くなることを確認できました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る