mirror of
https://github.com/mainflux/mainflux.git
synced 2025-05-01 13:48:56 +08:00
NOISSUE - RabbitMQ build and deployment (#1570)
* Initial commit of adding rabbitmq broker Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Initial commit of adding rabbitmq broker Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Initial commit for tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Bump up tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Add more tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Add go routines Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Initial commit of adding rabbitmq broker Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Initial commit of adding rabbitmq broker Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Initial commit for tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Bump up tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Add more tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Add go routines Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Fix tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Fix with wait groups Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * unsubscribe to stop delivering messages Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Remove exclusivity Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Implement cancel mechanisms Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Queuename as parameter Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Queuename as parameter Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Initial commit Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Remove broker type Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Configure broker with makefile Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Check if we have changed MESSAGE_BROKER_FILE~ Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Set nats automatically Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Catching null and invalid broker type Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Remove unused fmt Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Fix tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Nats Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * unexport constants Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change routingkey Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Remove wait groups Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * protecting map Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Add publisher to pubsub Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change proto library Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Fix typos Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Reduce pubsub tests based on implementation Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Remove channel cancel Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Export constant Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Embedding publisher into pubsub Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Naming publisher Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Update rabbitmq subscriber interface Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * using publisher composition Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change contenttype Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * rename topic for publish and subscribe Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change errors to lower case Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change errors to lower case Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * export errors Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * queue per subscription Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * queue per subscription Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Merge branch 'master' into RabbitMQ-deployment Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * rename nats to broker Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change routing method Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Direct method with one exchange to many queues, one consumer per queue Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1263 - Move repeating errors to the separate package (#1540) * MF-1263 - Mv duplicated errors to pkg/errors Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Revert test build flags Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix merge Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix comment Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> Co-authored-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * NOISSUE - Fix auth members list response (#1555) * NOISSUE - Fix auth members list response Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Move group type next to page details Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rm membersRes Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1261 - Use StatusUnauthorized for authn and StatusForbidden for authz (#1538) * MF-1261 - Use StatusUnauthorized for authn and StatusForbidden for authz Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * ErrExternalKey typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rename ErrUnauthorizedAcces -> ErrAuthentication Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix bootstrap error Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix status code in openapi Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix test description Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix test description Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix test description Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add errors cases Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix status codes Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add gRPC stutus code Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix tests description Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix openapi and encodeError Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix grpc message Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix test descriptions Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Revert sdk error Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1059 - Add TLS support for email (#1560) * Use gomail package for sending emails Signed-off-by: Ivan Milosevic <iva@blokovi.com> * remove print err Signed-off-by: Ivan Milosevic <iva@blokovi.com> * Add vendor Signed-off-by: Ivan Milosevic <iva@blokovi.com> * Rename email structure remove logger Signed-off-by: Ivan Milosevic <iva@blokovi.com> * typo in var name Signed-off-by: Ivan Milosevic <iva@blokovi.com> * rename var Signed-off-by: Ivan Milosevic <iva@blokovi.com> * remove MF_EMAIL_SECRET Signed-off-by: Ivan Milosevic <iva@blokovi.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * NOISSUE - Refactor MQTT subscriber (#1561) * correct suscriber interface validator + refactore token error handling Signed-off-by: tzzed <zerouali.t@gmail.com> * apply review suggestion Signed-off-by: tzzed <zerouali.t@gmail.com> Co-authored-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1257 - Access messages from readers endpoint with user access token (#1470) * remove owner id Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add user auth for db reader Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * add user auth for db reader Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * enable mongodb reader for user token reading Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * use uuid check for auth switch between thing key and user tok Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * enable user token reading Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * revert to correct version Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * fix endpoint test, add additional tests Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * remove logs,dead code Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * fix logging messages Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * remove auth interface, add authorization header type Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * update api doc Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * remove unused package Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * some refactor of cases for authorization switch Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * correct description in openapi Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * fix endpoint test to match auth service change Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * some rename Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * initialize auth url Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * add env variables for auth service Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * fix spelling Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * Things prefix and no prefix for Thing authorization, Bearer for user Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * update readme file Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * fix default things grpc port Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * enable user reading for timescaledb Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * remove not used error Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * improve errors Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * refactor authorize Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * add chanID check Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * inline some error checking Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * fixing errors Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * fixing errors Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * improve test case description Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * remove test code Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * dont inline Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * refactor a bit encodeError Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * remove unused error Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * remove unused error Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * fix things auth grpc url Signed-off-by: mteodor <mirko.teodorovic@gmail.com> * rename variables for header prefix Signed-off-by: mteodor <mirko.teodorovic@gmail.com> Co-authored-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Initial commit of adding rabbitmq broker Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Initial commit of adding rabbitmq broker Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Initial commit for tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Bump up tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Add more tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Add go routines Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Initial commit of adding rabbitmq broker Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Initial commit for tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Bump up tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Add more tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Add go routines Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Fix tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Fix with wait groups Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * unsubscribe to stop delivering messages Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Remove exclusivity Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1551 - Fix Cobra usage commands and clean unnecessary struct types (#1558) * MF-1551 - Fix Cobra usage commands and clean unnecessary struct types Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Use linux syntax for cmd usage description Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix cmd.Use Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * NOISSUE - Separate Keto hosts for read and write (#1563) * Separate keto hosts for read and write Signed-off-by: Ivan Milosevic <iva@blokovi.com> * update readme with new envars Signed-off-by: Ivan Milosevic <iva@blokovi.com> * rename read connection name Signed-off-by: Ivan Milosevic <iva@blokovi.com> Co-authored-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com> Co-authored-by: Drasko DRASKOVIC <drasko.draskovic@gmail.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Update dependencies (#1564) Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1240 - Return to service transport layer only service errors (#1559) * MF-1240 - Return to service transport layer only service errors Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Remove unecessary errors Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rm duplicated errors and fix transport Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Revert http endpoint_test Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix conflict Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> Co-authored-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Implement cancel mechanisms Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Queuename as parameter Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Queuename as parameter Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1469 - Indicate proper authentication scheme in Authorization header (#1523) * MF-1469 - Indicate proper authentication scheme in Authorization header Signed-off-by: Stefan Kovacevic <jen2tri@gmail.com> * Fixing the remarks on the last push Signed-off-by: Stefan Kovacevic <jen2tri@gmail.com> * Remove Bearer prefix in all services and fix tests Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix remarks Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> Co-authored-by: Manuel Imperiale <manuel.imperiale@gmail.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * NOISSUE - Add nats wrapper for COAP (#1569) * Add nats wrapper for COAP Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Pass pubsub as argument Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Defer close connection Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Defer close connection Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Rename endpoint to topic Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1348 - Add transport errors logging (#1544) * MF-1348 - Add go-kit transport level logging Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix reviews Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix reviews Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix merge Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix remark Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix go test flags Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Use httputil errors in things and http service Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix SDK tests Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Use httputil errors in certs and provision service Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Use httputil errors in consumers service Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * General renaming and add ErrMissingToken Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rename httputil -> apiutil and use errors in users servive Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Use apiutil errors in auth, bootstrap, readers, things and twins Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Replace errors.Contain by comparison Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix remarks Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Simplify validateID Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Simplify validateID Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Simplify and rename ExtractAuthToken -> ExtractBearerToken Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix readers Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix auth key test and remarks Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Improve comment Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Simplify validateUUID check Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> Co-authored-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1567 - Use Bearer, Thing or Basic scheme in Authorization header (#1568) Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1565 - Document Bearer, Thing and Basic Authorization header (#1566) * MF-1565 - Document Bearer Authorization header Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix auth, bootstrap, http and readers openapi Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix openapi Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add enc key for bootstrap Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Use global security Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix bearer formats Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Polish descriptions Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix boostrap and typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> Co-authored-by: Drasko DRASKOVIC <drasko.draskovic@gmail.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1575 Add 'Name' field to ListMembers response in things svc (#1576) Signed-off-by: Ivan Balboteo <ivan@submer.com> Co-authored-by: Ivan Balboteo <ivan@submer.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1580 - Influxdb Writer changes format of update-time to string (#1581) * - MF-1580 - Modified consumers/writers/influxdb/fields.go - influxdb-writer used to update data type of update-time to string - Commented line 12 of consumers/writers/influxdb/fields.go to resolve uneccessary data type conversion issue Signed-off-by: Hasan Tariq <hasantariqashraf@gmail.com> * - MF-1580 - Removed strconv package from consumers/writers/influxdb/fields.go since it is no longer needed - Removed line 12 from consumers/writers/influxdb/fields.go - Replaced retrun value of updateTime with msg.UpdateTime (line 16 in fields.go) Signed-off-by: Hasan Tariq <hasantariqashraf@gmail.com> * Fix InflxuDB readers Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> Co-authored-by: Hasan Tariq <hasant@plcgroup.com> Co-authored-by: dusanb94 <dusan.borovcanin@mainflux.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * NOISSUE - Unify MF_INFLUX_READER_DB_HOST and MF_INFLUX_WRITER_DB_HOST envars (#1585) Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * NOISSUE - Fix CoAP adapter (#1572) * Revert "NOISSUE - Add nats wrapper for COAP (#1569)" This reverts commit cc5d5195ab27fa94270ada616487b7053fd9c7bd. Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix CoAP adapter Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Update CoAP observation cancel Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix observe Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix GET handling Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Revert authorization Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Use constants instead of magic numbers Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Remove an empty line Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Extract special observe value to constant Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1582 - Fix lora-adapter MQTT client (#1583) * MF-1582 - Fix lora-adapter MQTT clien Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add timeout config to the mqtt subscriber Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rm comment Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add sub timeout Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * NOISSUE - Update changelog and readme for release 0.13.0 (#1592) * Update release example Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Update changelog and examples for 0.13.0 release Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Update VerneMQ release (#1593) Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * NOISSUE - Update changelog for release 0.13.0 (#1595) Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * unexport constants Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change routingkey Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Remove wait groups Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * protecting map Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Add publisher to pubsub Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change proto library Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Fix typos Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Reduce pubsub tests based on implementation Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Remove channel cancel Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Export constant Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * NOISSUE - Move invariant statements out of loop for cassandra-writer (#1596) Signed-off-by: fuzhy <fuzhy1997@outlook.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Embedding publisher into pubsub Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Naming publisher Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * NOISSUE - Fix Nginx entrypoint script (#1597) * Fix Nginx entrypoint script Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Update dependencies Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix NginX entrypoint Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Revert Makefile changes Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1525 - Add graceful stop for HTTP and GRPC servers (#1548) * Add : errgroup to cmd/auth Signed-off-by: Arvindh <arvindh91@gmail.com> * Add : Handle graceful stop for auth service Remove : errgroups from auth service Signed-off-by: Arvindh <arvindh91@gmail.com> * Add : Wait till server shutdown Signed-off-by: Arvindh <arvindh91@gmail.com> * Change : instead of waitgroup changed to errgroups Signed-off-by: Arvindh <arvindh91@gmail.com> * change : KillSignalHandler return type to error Signed-off-by: Arvindh <arvindh91@gmail.com> * Empty Commit Signed-off-by: Arvindh <arvindh91@gmail.com> * Add : Context to http server shutdown Rename : varaible from proto to protocol Signed-off-by: Arvindh <arvindh91@gmail.com> * change : to default log level Signed-off-by: Arvindh <arvindh91@gmail.com> * Add : Sign-off Signed-off-by: Arvindh <arvindh91@gmail.com> * Add: graceful stop of http and grpc server Signed-off-by: Arvindh <arvindh91@gmail.com> * Fix: typos and caps Signed-off-by: Arvindh <arvindh91@gmail.com> * Add: Signed-off Signed-off-by: Arvindh <arvindh91@gmail.com> * Rename: Func KillSignalHandler to SignalHandler Add: SIGABRT Signed-off-by: Arvindh <arvindh91@gmail.com> * Fix: auth service Signed-off-by: Arvindh <arvindh91@gmail.com> * Add: timeout for grpc gracefulstop Fix: typos Signed-off-by: Arvindh <arvindh91@gmail.com> * Add: .vscode folder to git ignore Signed-off-by: Arvindh <arvindh91@gmail.com> * change: variable name to stopWaitTime Signed-off-by: Arvindh <arvindh91@gmail.com> * remove: .vscode folder Signed-off-by: Arvindh <arvindh91@gmail.com> * remove: .vscode from .gitignore Signed-off-by: Arvindh <arvindh91@gmail.com> * Add : logger to handlers Signed-off-by: Arvindh <arvindh91@gmail.com> * Add : New line at end of .gitignore file Signed-off-by: Arvindh <arvindh91@gmail.com> * Fix : variable naming Add : graceful stop for timescale Signed-off-by: Arvindh <arvindh91@gmail.com> * Remove : unsued NATS library from import Signed-off-by: Arvindh <arvindh91@gmail.com> * Move: "https" and "https" to moved to const var Signed-off-by: Arvindh <arvindh91@gmail.com> * Move: "http" and "https" to moved to const var Signed-off-by: Arvindh <arvindh91@gmail.com> * update: branch with master Signed-off-by: Arvindh <arvindh91@gmail.com> Co-authored-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com> Co-authored-by: Drasko DRASKOVIC <drasko.draskovic@gmail.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF-1588 - Update Subscriber interface (#1598) * Initial commit Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Update subscriber interface Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Add tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * check subscription map Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Check topic id after topic Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * reword description Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Setup empty queue Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change mqtt implementation Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Switch statements Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Simplify Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change mqtt subscriber Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Protect subscription map Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Fix subscription Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Set client id Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Format Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change delete method Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> Co-authored-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Update rabbitmq subscriber interface Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * using publisher composition Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change contenttype Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * rename topic for publish and subscribe Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change errors to lower case Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change errors to lower case Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * export errors Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * MF - 1590 - Fix fetching list of users with a zero limit (#1594) * Add max and min limit size Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Format Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Format Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> Co-authored-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * NOISSUE - Retrieve client key on cert issuing (#1607) Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * fix bug (#1604) Signed-off-by: zhangchuanfeng <654300242@qq.com> Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * queue per subscription Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * queue per subscription Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change routing method Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Direct method with one exchange to many queues, one consumer per queue Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * ♻️ Not casting data Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * ✏️ Fix typo Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * ♻️ remove passed queue name Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * 🔥 removing echange kind Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Combine tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Refactor unsubscribe method Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Fix merge conflict Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * ✅ sub and unsub to dummy topic Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * generate client id from topic and ID Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Rename topicID to clientID Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * update tests Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * merge changes Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * ♻️ rename constant and variable declaration Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * rename to brokers Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * ♻️ Rename brokers Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change mqtt implementation Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Rename broker to brokers Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * include nats port Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * move to build tags Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * move to build tags Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * add nats build tag to test Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * \n at the end of file Signed-off-by: GitHub <noreply@github.com> * Add init function Signed-off-by: GitHub <noreply@github.com> * Add init function Signed-off-by: GitHub <noreply@github.com> * broker url automatically Signed-off-by: GitHub <noreply@github.com> * make nats as the default broker Signed-off-by: GitHub <noreply@github.com> * Updated publisher and subscriber interface Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Add error to close Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Change image version and let user define URI Signed-off-by: GitHub <noreply@github.com> * make broker url configurable Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * add compile check Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * rabbitmq check Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * default broker to nats Signed-off-by: GitHub <noreply@github.com> * change broker url in docker compose Signed-off-by: GitHub <noreply@github.com> * Fix ci Signed-off-by: GitHub <noreply@github.com> * fix makefile Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Fix env var and ci Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Fix ci Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> * Fix consts Signed-off-by: 0x6f736f646f <blackd0t@protonmail.com> Co-authored-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com> Co-authored-by: Manuel Imperiale <manuel.Imperiale@gmail.com> Co-authored-by: Ivan Milošević <iva@blokovi.com> Co-authored-by: __touk__ <zerouali.t@gmail.com> Co-authored-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> Co-authored-by: Drasko DRASKOVIC <drasko.draskovic@gmail.com> Co-authored-by: stefankovacevic123 <jen2tri@gmail.com> Co-authored-by: ibalboteo <ivanbalboteo@gmail.com> Co-authored-by: Ivan Balboteo <ivan@submer.com> Co-authored-by: Hasan98-git <67228396+Hasan98-git@users.noreply.github.com> Co-authored-by: Hasan Tariq <hasant@plcgroup.com> Co-authored-by: fuzhy <fuzhy1997@outlook.com> Co-authored-by: Arvindh <30824765+arvindh123@users.noreply.github.com> Co-authored-by: 张传峰 <59160162+zhang-chuanfeng@users.noreply.github.com>
This commit is contained in:
parent
9a87e5cd1f
commit
5c495238a6
17
Makefile
17
Makefile
@ -14,9 +14,15 @@ VERSION ?= $(shell git describe --abbrev=0 --tags)
|
|||||||
COMMIT ?= $(shell git rev-parse HEAD)
|
COMMIT ?= $(shell git rev-parse HEAD)
|
||||||
TIME ?= $(shell date +%F_%T)
|
TIME ?= $(shell date +%F_%T)
|
||||||
|
|
||||||
|
ifneq ($(MF_BROKER_TYPE),)
|
||||||
|
MF_BROKER_TYPE := $(MF_BROKER_TYPE)
|
||||||
|
else
|
||||||
|
MF_BROKER_TYPE=nats
|
||||||
|
endif
|
||||||
|
|
||||||
define compile_service
|
define compile_service
|
||||||
CGO_ENABLED=$(CGO_ENABLED) GOOS=$(GOOS) GOARCH=$(GOARCH) GOARM=$(GOARM) \
|
CGO_ENABLED=$(CGO_ENABLED) GOOS=$(GOOS) GOARCH=$(GOARCH) GOARM=$(GOARM) \
|
||||||
go build -mod=vendor -ldflags "-s -w \
|
go build -mod=vendor -tags $(MF_BROKER_TYPE) -ldflags "-s -w \
|
||||||
-X 'github.com/mainflux/mainflux.BuildTime=$(TIME)' \
|
-X 'github.com/mainflux/mainflux.BuildTime=$(TIME)' \
|
||||||
-X 'github.com/mainflux/mainflux.Version=$(VERSION)' \
|
-X 'github.com/mainflux/mainflux.Version=$(VERSION)' \
|
||||||
-X 'github.com/mainflux/mainflux.Commit=$(COMMIT)'" \
|
-X 'github.com/mainflux/mainflux.Commit=$(COMMIT)'" \
|
||||||
@ -111,4 +117,13 @@ rundev:
|
|||||||
cd scripts && ./run.sh
|
cd scripts && ./run.sh
|
||||||
|
|
||||||
run:
|
run:
|
||||||
|
ifeq ("$(MF_BROKER_TYPE)", "rabbitmq")
|
||||||
|
sed -i "s,file: brokers/.*.yml,file: brokers/rabbitmq.yml," docker/docker-compose.yml
|
||||||
|
sed -i "s,MF_BROKER_URL: .*,MF_BROKER_URL: $$\{MF_RABBITMQ_URL\}," docker/docker-compose.yml
|
||||||
|
else ifeq ("$(MF_BROKER_TYPE)", "nats")
|
||||||
|
sed -i "s,file: brokers/.*.yml,file: brokers/nats.yml," docker/docker-compose.yml
|
||||||
|
sed -i "s,MF_BROKER_URL: .*,MF_BROKER_URL: $$\{MF_NATS_URL\}," docker/docker-compose.yml
|
||||||
|
else
|
||||||
|
echo "Invalid broker type"; exit 1
|
||||||
|
endif
|
||||||
docker-compose -f docker/docker-compose.yml up
|
docker-compose -f docker/docker-compose.yml up
|
||||||
|
@ -7,7 +7,7 @@ info:
|
|||||||
version: '1.0.0'
|
version: '1.0.0'
|
||||||
description: |
|
description: |
|
||||||
MQTT adapter provides an MQTT API for sending messages through the platform. MQTT adapter uses [mProxy](https://github.com/mainflux/mproxy) for proxying traffic between client and MQTT broker.
|
MQTT adapter provides an MQTT API for sending messages through the platform. MQTT adapter uses [mProxy](https://github.com/mainflux/mproxy) for proxying traffic between client and MQTT broker.
|
||||||
Additionally, the MQTT adapter and the NATS message broker are replicating the traffic between brokers.
|
Additionally, the MQTT adapter and the message broker are replicating the traffic between brokers.
|
||||||
|
|
||||||
defaultContentType: application/json
|
defaultContentType: application/json
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ import (
|
|||||||
"github.com/mainflux/mainflux/consumers/writers/cassandra"
|
"github.com/mainflux/mainflux/consumers/writers/cassandra"
|
||||||
"github.com/mainflux/mainflux/logger"
|
"github.com/mainflux/mainflux/logger"
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
"github.com/mainflux/mainflux/pkg/messaging/brokers"
|
||||||
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
)
|
)
|
||||||
@ -31,7 +31,7 @@ const (
|
|||||||
sep = ","
|
sep = ","
|
||||||
stopWaitTime = 5 * time.Second
|
stopWaitTime = 5 * time.Second
|
||||||
|
|
||||||
defNatsURL = "nats://localhost:4222"
|
defBrokerURL = "nats://localhost:4222"
|
||||||
defLogLevel = "error"
|
defLogLevel = "error"
|
||||||
defPort = "8180"
|
defPort = "8180"
|
||||||
defCluster = "127.0.0.1"
|
defCluster = "127.0.0.1"
|
||||||
@ -41,7 +41,7 @@ const (
|
|||||||
defDBPort = "9042"
|
defDBPort = "9042"
|
||||||
defConfigPath = "/config.toml"
|
defConfigPath = "/config.toml"
|
||||||
|
|
||||||
envNatsURL = "MF_NATS_URL"
|
envBrokerURL = "MF_BROKER_URL"
|
||||||
envLogLevel = "MF_CASSANDRA_WRITER_LOG_LEVEL"
|
envLogLevel = "MF_CASSANDRA_WRITER_LOG_LEVEL"
|
||||||
envPort = "MF_CASSANDRA_WRITER_PORT"
|
envPort = "MF_CASSANDRA_WRITER_PORT"
|
||||||
envCluster = "MF_CASSANDRA_WRITER_DB_CLUSTER"
|
envCluster = "MF_CASSANDRA_WRITER_DB_CLUSTER"
|
||||||
@ -53,7 +53,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
natsURL string
|
brokerURL string
|
||||||
logLevel string
|
logLevel string
|
||||||
port string
|
port string
|
||||||
configPath string
|
configPath string
|
||||||
@ -70,9 +70,9 @@ func main() {
|
|||||||
log.Fatalf(err.Error())
|
log.Fatalf(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
pubSub, err := nats.NewPubSub(cfg.natsURL, "", logger)
|
pubSub, err := brokers.NewPubSub(cfg.brokerURL, "", logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to connect to NATS: %s", err))
|
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer pubSub.Close()
|
defer pubSub.Close()
|
||||||
@ -116,7 +116,7 @@ func loadConfig() config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return config{
|
return config{
|
||||||
natsURL: mainflux.Env(envNatsURL, defNatsURL),
|
brokerURL: mainflux.Env(envBrokerURL, defBrokerURL),
|
||||||
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
||||||
port: mainflux.Env(envPort, defPort),
|
port: mainflux.Env(envPort, defPort),
|
||||||
configPath: mainflux.Env(envConfigPath, defConfigPath),
|
configPath: mainflux.Env(envConfigPath, defConfigPath),
|
||||||
|
@ -19,8 +19,8 @@ import (
|
|||||||
"github.com/mainflux/mainflux/coap"
|
"github.com/mainflux/mainflux/coap"
|
||||||
"github.com/mainflux/mainflux/coap/api"
|
"github.com/mainflux/mainflux/coap/api"
|
||||||
logger "github.com/mainflux/mainflux/logger"
|
logger "github.com/mainflux/mainflux/logger"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
|
"github.com/mainflux/mainflux/pkg/messaging/brokers"
|
||||||
thingsapi "github.com/mainflux/mainflux/things/api/auth/grpc"
|
thingsapi "github.com/mainflux/mainflux/things/api/auth/grpc"
|
||||||
opentracing "github.com/opentracing/opentracing-go"
|
opentracing "github.com/opentracing/opentracing-go"
|
||||||
gocoap "github.com/plgd-dev/go-coap/v2"
|
gocoap "github.com/plgd-dev/go-coap/v2"
|
||||||
@ -35,7 +35,7 @@ const (
|
|||||||
stopWaitTime = 5 * time.Second
|
stopWaitTime = 5 * time.Second
|
||||||
|
|
||||||
defPort = "5683"
|
defPort = "5683"
|
||||||
defNatsURL = "nats://localhost:4222"
|
defBrokerURL = "nats://localhost:4222"
|
||||||
defLogLevel = "error"
|
defLogLevel = "error"
|
||||||
defClientTLS = "false"
|
defClientTLS = "false"
|
||||||
defCACerts = ""
|
defCACerts = ""
|
||||||
@ -44,7 +44,7 @@ const (
|
|||||||
defThingsAuthTimeout = "1s"
|
defThingsAuthTimeout = "1s"
|
||||||
|
|
||||||
envPort = "MF_COAP_ADAPTER_PORT"
|
envPort = "MF_COAP_ADAPTER_PORT"
|
||||||
envNatsURL = "MF_NATS_URL"
|
envBrokerURL = "MF_BROKER_URL"
|
||||||
envLogLevel = "MF_COAP_ADAPTER_LOG_LEVEL"
|
envLogLevel = "MF_COAP_ADAPTER_LOG_LEVEL"
|
||||||
envClientTLS = "MF_COAP_ADAPTER_CLIENT_TLS"
|
envClientTLS = "MF_COAP_ADAPTER_CLIENT_TLS"
|
||||||
envCACerts = "MF_COAP_ADAPTER_CA_CERTS"
|
envCACerts = "MF_COAP_ADAPTER_CA_CERTS"
|
||||||
@ -55,7 +55,7 @@ const (
|
|||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
port string
|
port string
|
||||||
natsURL string
|
brokerURL string
|
||||||
logLevel string
|
logLevel string
|
||||||
clientTLS bool
|
clientTLS bool
|
||||||
caCerts string
|
caCerts string
|
||||||
@ -82,9 +82,9 @@ func main() {
|
|||||||
|
|
||||||
tc := thingsapi.NewClient(conn, thingsTracer, cfg.thingsAuthTimeout)
|
tc := thingsapi.NewClient(conn, thingsTracer, cfg.thingsAuthTimeout)
|
||||||
|
|
||||||
nps, err := nats.NewPubSub(cfg.natsURL, "", logger)
|
nps, err := brokers.NewPubSub(cfg.brokerURL, "", logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to connect to NATS: %s", err))
|
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer nps.Close()
|
defer nps.Close()
|
||||||
@ -142,7 +142,7 @@ func loadConfig() config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return config{
|
return config{
|
||||||
natsURL: mainflux.Env(envNatsURL, defNatsURL),
|
brokerURL: mainflux.Env(envBrokerURL, defBrokerURL),
|
||||||
port: mainflux.Env(envPort, defPort),
|
port: mainflux.Env(envPort, defPort),
|
||||||
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
||||||
clientTLS: tls,
|
clientTLS: tls,
|
||||||
|
@ -22,7 +22,7 @@ import (
|
|||||||
"github.com/mainflux/mainflux/http/api"
|
"github.com/mainflux/mainflux/http/api"
|
||||||
"github.com/mainflux/mainflux/logger"
|
"github.com/mainflux/mainflux/logger"
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
"github.com/mainflux/mainflux/pkg/messaging/brokers"
|
||||||
thingsapi "github.com/mainflux/mainflux/things/api/auth/grpc"
|
thingsapi "github.com/mainflux/mainflux/things/api/auth/grpc"
|
||||||
"github.com/opentracing/opentracing-go"
|
"github.com/opentracing/opentracing-go"
|
||||||
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
||||||
@ -38,7 +38,7 @@ const (
|
|||||||
defClientTLS = "false"
|
defClientTLS = "false"
|
||||||
defCACerts = ""
|
defCACerts = ""
|
||||||
defPort = "8180"
|
defPort = "8180"
|
||||||
defNatsURL = "nats://localhost:4222"
|
defBrokerURL = "nats://localhost:4222"
|
||||||
defJaegerURL = ""
|
defJaegerURL = ""
|
||||||
defThingsAuthURL = "localhost:8183"
|
defThingsAuthURL = "localhost:8183"
|
||||||
defThingsAuthTimeout = "1s"
|
defThingsAuthTimeout = "1s"
|
||||||
@ -47,14 +47,14 @@ const (
|
|||||||
envClientTLS = "MF_HTTP_ADAPTER_CLIENT_TLS"
|
envClientTLS = "MF_HTTP_ADAPTER_CLIENT_TLS"
|
||||||
envCACerts = "MF_HTTP_ADAPTER_CA_CERTS"
|
envCACerts = "MF_HTTP_ADAPTER_CA_CERTS"
|
||||||
envPort = "MF_HTTP_ADAPTER_PORT"
|
envPort = "MF_HTTP_ADAPTER_PORT"
|
||||||
envNatsURL = "MF_NATS_URL"
|
envBrokerURL = "MF_BROKER_URL"
|
||||||
envJaegerURL = "MF_JAEGER_URL"
|
envJaegerURL = "MF_JAEGER_URL"
|
||||||
envThingsAuthURL = "MF_THINGS_AUTH_GRPC_URL"
|
envThingsAuthURL = "MF_THINGS_AUTH_GRPC_URL"
|
||||||
envThingsAuthTimeout = "MF_THINGS_AUTH_GRPC_TIMEOUT"
|
envThingsAuthTimeout = "MF_THINGS_AUTH_GRPC_TIMEOUT"
|
||||||
)
|
)
|
||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
natsURL string
|
brokerURL string
|
||||||
logLevel string
|
logLevel string
|
||||||
port string
|
port string
|
||||||
clientTLS bool
|
clientTLS bool
|
||||||
@ -83,9 +83,9 @@ func main() {
|
|||||||
thingsTracer, thingsCloser := initJaeger("things", cfg.jaegerURL, logger)
|
thingsTracer, thingsCloser := initJaeger("things", cfg.jaegerURL, logger)
|
||||||
defer thingsCloser.Close()
|
defer thingsCloser.Close()
|
||||||
|
|
||||||
pub, err := nats.NewPublisher(cfg.natsURL)
|
pub, err := brokers.NewPublisher(cfg.brokerURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to connect to NATS: %s", err))
|
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer pub.Close()
|
defer pub.Close()
|
||||||
@ -139,7 +139,7 @@ func loadConfig() config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return config{
|
return config{
|
||||||
natsURL: mainflux.Env(envNatsURL, defNatsURL),
|
brokerURL: mainflux.Env(envBrokerURL, defBrokerURL),
|
||||||
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
||||||
port: mainflux.Env(envPort, defPort),
|
port: mainflux.Env(envPort, defPort),
|
||||||
clientTLS: tls,
|
clientTLS: tls,
|
||||||
|
@ -19,7 +19,7 @@ import (
|
|||||||
"github.com/mainflux/mainflux/consumers/writers/influxdb"
|
"github.com/mainflux/mainflux/consumers/writers/influxdb"
|
||||||
"github.com/mainflux/mainflux/logger"
|
"github.com/mainflux/mainflux/logger"
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
"github.com/mainflux/mainflux/pkg/messaging/brokers"
|
||||||
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
)
|
)
|
||||||
@ -28,7 +28,7 @@ const (
|
|||||||
svcName = "influxdb-writer"
|
svcName = "influxdb-writer"
|
||||||
stopWaitTime = 5 * time.Second
|
stopWaitTime = 5 * time.Second
|
||||||
|
|
||||||
defNatsURL = "nats://localhost:4222"
|
defBrokerURL = "nats://localhost:4222"
|
||||||
defLogLevel = "error"
|
defLogLevel = "error"
|
||||||
defPort = "8180"
|
defPort = "8180"
|
||||||
defDB = "mainflux"
|
defDB = "mainflux"
|
||||||
@ -38,7 +38,7 @@ const (
|
|||||||
defDBPass = "mainflux"
|
defDBPass = "mainflux"
|
||||||
defConfigPath = "/config.toml"
|
defConfigPath = "/config.toml"
|
||||||
|
|
||||||
envNatsURL = "MF_NATS_URL"
|
envBrokerURL = "MF_BROKER_URL"
|
||||||
envLogLevel = "MF_INFLUX_WRITER_LOG_LEVEL"
|
envLogLevel = "MF_INFLUX_WRITER_LOG_LEVEL"
|
||||||
envPort = "MF_INFLUX_WRITER_PORT"
|
envPort = "MF_INFLUX_WRITER_PORT"
|
||||||
envDB = "MF_INFLUXDB_DB"
|
envDB = "MF_INFLUXDB_DB"
|
||||||
@ -50,7 +50,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
natsURL string
|
brokerURL string
|
||||||
logLevel string
|
logLevel string
|
||||||
port string
|
port string
|
||||||
dbName string
|
dbName string
|
||||||
@ -71,9 +71,9 @@ func main() {
|
|||||||
log.Fatalf(err.Error())
|
log.Fatalf(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
pubSub, err := nats.NewPubSub(cfg.natsURL, "", logger)
|
pubSub, err := brokers.NewPubSub(cfg.brokerURL, "", logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to connect to NATS: %s", err))
|
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer pubSub.Close()
|
defer pubSub.Close()
|
||||||
@ -115,7 +115,7 @@ func main() {
|
|||||||
|
|
||||||
func loadConfigs() (config, influxdata.HTTPConfig) {
|
func loadConfigs() (config, influxdata.HTTPConfig) {
|
||||||
cfg := config{
|
cfg := config{
|
||||||
natsURL: mainflux.Env(envNatsURL, defNatsURL),
|
brokerURL: mainflux.Env(envBrokerURL, defBrokerURL),
|
||||||
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
||||||
port: mainflux.Env(envPort, defPort),
|
port: mainflux.Env(envPort, defPort),
|
||||||
dbName: mainflux.Env(envDB, defDB),
|
dbName: mainflux.Env(envDB, defDB),
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"github.com/mainflux/mainflux/lora/api"
|
"github.com/mainflux/mainflux/lora/api"
|
||||||
"github.com/mainflux/mainflux/lora/mqtt"
|
"github.com/mainflux/mainflux/lora/mqtt"
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
"github.com/mainflux/mainflux/pkg/messaging/brokers"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
|
|
||||||
kitprometheus "github.com/go-kit/kit/metrics/prometheus"
|
kitprometheus "github.com/go-kit/kit/metrics/prometheus"
|
||||||
@ -34,11 +34,11 @@ const (
|
|||||||
defLogLevel = "error"
|
defLogLevel = "error"
|
||||||
defHTTPPort = "8180"
|
defHTTPPort = "8180"
|
||||||
defLoraMsgURL = "tcp://localhost:1883"
|
defLoraMsgURL = "tcp://localhost:1883"
|
||||||
|
defBrokerURL = "nats://localhost:4222"
|
||||||
defLoraMsgTopic = "application/+/device/+/event/up"
|
defLoraMsgTopic = "application/+/device/+/event/up"
|
||||||
defLoraMsgUser = ""
|
defLoraMsgUser = ""
|
||||||
defLoraMsgPass = ""
|
defLoraMsgPass = ""
|
||||||
defLoraMsgTimeout = "30s"
|
defLoraMsgTimeout = "30s"
|
||||||
defNatsURL = "nats://localhost:4222"
|
|
||||||
defESURL = "localhost:6379"
|
defESURL = "localhost:6379"
|
||||||
defESPass = ""
|
defESPass = ""
|
||||||
defESDB = "0"
|
defESDB = "0"
|
||||||
@ -49,11 +49,11 @@ const (
|
|||||||
|
|
||||||
envHTTPPort = "MF_LORA_ADAPTER_HTTP_PORT"
|
envHTTPPort = "MF_LORA_ADAPTER_HTTP_PORT"
|
||||||
envLoraMsgURL = "MF_LORA_ADAPTER_MESSAGES_URL"
|
envLoraMsgURL = "MF_LORA_ADAPTER_MESSAGES_URL"
|
||||||
|
envBrokerURL = "MF_BROKER_URL"
|
||||||
envLoraMsgTopic = "MF_LORA_ADAPTER_MESSAGES_TOPIC"
|
envLoraMsgTopic = "MF_LORA_ADAPTER_MESSAGES_TOPIC"
|
||||||
envLoraMsgUser = "MF_LORA_ADAPTER_MESSAGES_USER"
|
envLoraMsgUser = "MF_LORA_ADAPTER_MESSAGES_USER"
|
||||||
envLoraMsgPass = "MF_LORA_ADAPTER_MESSAGES_PASS"
|
envLoraMsgPass = "MF_LORA_ADAPTER_MESSAGES_PASS"
|
||||||
envLoraMsgTimeout = "MF_LORA_ADAPTER_MESSAGES_TIMEOUT"
|
envLoraMsgTimeout = "MF_LORA_ADAPTER_MESSAGES_TIMEOUT"
|
||||||
envNatsURL = "MF_NATS_URL"
|
|
||||||
envLogLevel = "MF_LORA_ADAPTER_LOG_LEVEL"
|
envLogLevel = "MF_LORA_ADAPTER_LOG_LEVEL"
|
||||||
envESURL = "MF_THINGS_ES_URL"
|
envESURL = "MF_THINGS_ES_URL"
|
||||||
envESPass = "MF_THINGS_ES_PASS"
|
envESPass = "MF_THINGS_ES_PASS"
|
||||||
@ -71,11 +71,11 @@ const (
|
|||||||
type config struct {
|
type config struct {
|
||||||
httpPort string
|
httpPort string
|
||||||
loraMsgURL string
|
loraMsgURL string
|
||||||
|
brokerURL string
|
||||||
loraMsgUser string
|
loraMsgUser string
|
||||||
loraMsgPass string
|
loraMsgPass string
|
||||||
loraMsgTopic string
|
loraMsgTopic string
|
||||||
loraMsgTimeout time.Duration
|
loraMsgTimeout time.Duration
|
||||||
natsURL string
|
|
||||||
logLevel string
|
logLevel string
|
||||||
esURL string
|
esURL string
|
||||||
esPass string
|
esPass string
|
||||||
@ -102,9 +102,9 @@ func main() {
|
|||||||
esConn := connectToRedis(cfg.esURL, cfg.esPass, cfg.esDB, logger)
|
esConn := connectToRedis(cfg.esURL, cfg.esPass, cfg.esDB, logger)
|
||||||
defer esConn.Close()
|
defer esConn.Close()
|
||||||
|
|
||||||
pub, err := nats.NewPublisher(cfg.natsURL)
|
pub, err := brokers.NewPublisher(cfg.brokerURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to connect to NATS: %s", err))
|
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer pub.Close()
|
defer pub.Close()
|
||||||
@ -163,11 +163,11 @@ func loadConfig() config {
|
|||||||
return config{
|
return config{
|
||||||
httpPort: mainflux.Env(envHTTPPort, defHTTPPort),
|
httpPort: mainflux.Env(envHTTPPort, defHTTPPort),
|
||||||
loraMsgURL: mainflux.Env(envLoraMsgURL, defLoraMsgURL),
|
loraMsgURL: mainflux.Env(envLoraMsgURL, defLoraMsgURL),
|
||||||
|
brokerURL: mainflux.Env(envBrokerURL, defBrokerURL),
|
||||||
loraMsgTopic: mainflux.Env(envLoraMsgTopic, defLoraMsgTopic),
|
loraMsgTopic: mainflux.Env(envLoraMsgTopic, defLoraMsgTopic),
|
||||||
loraMsgUser: mainflux.Env(envLoraMsgUser, defLoraMsgUser),
|
loraMsgUser: mainflux.Env(envLoraMsgUser, defLoraMsgUser),
|
||||||
loraMsgPass: mainflux.Env(envLoraMsgPass, defLoraMsgPass),
|
loraMsgPass: mainflux.Env(envLoraMsgPass, defLoraMsgPass),
|
||||||
loraMsgTimeout: mqttTimeout,
|
loraMsgTimeout: mqttTimeout,
|
||||||
natsURL: mainflux.Env(envNatsURL, defNatsURL),
|
|
||||||
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
||||||
esURL: mainflux.Env(envESURL, defESURL),
|
esURL: mainflux.Env(envESURL, defESURL),
|
||||||
esPass: mainflux.Env(envESPass, defESPass),
|
esPass: mainflux.Env(envESPass, defESPass),
|
||||||
|
@ -18,7 +18,7 @@ import (
|
|||||||
"github.com/mainflux/mainflux/consumers/writers/mongodb"
|
"github.com/mainflux/mainflux/consumers/writers/mongodb"
|
||||||
"github.com/mainflux/mainflux/logger"
|
"github.com/mainflux/mainflux/logger"
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
"github.com/mainflux/mainflux/pkg/messaging/brokers"
|
||||||
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
||||||
"go.mongodb.org/mongo-driver/mongo"
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
"go.mongodb.org/mongo-driver/mongo/options"
|
"go.mongodb.org/mongo-driver/mongo/options"
|
||||||
@ -30,14 +30,14 @@ const (
|
|||||||
stopWaitTime = 5 * time.Second
|
stopWaitTime = 5 * time.Second
|
||||||
|
|
||||||
defLogLevel = "error"
|
defLogLevel = "error"
|
||||||
defNatsURL = "nats://localhost:4222"
|
defBrokerURL = "nats://localhost:4222"
|
||||||
defPort = "8180"
|
defPort = "8180"
|
||||||
defDB = "mainflux"
|
defDB = "mainflux"
|
||||||
defDBHost = "localhost"
|
defDBHost = "localhost"
|
||||||
defDBPort = "27017"
|
defDBPort = "27017"
|
||||||
defConfigPath = "/config.toml"
|
defConfigPath = "/config.toml"
|
||||||
|
|
||||||
envNatsURL = "MF_NATS_URL"
|
envBrokerURL = "MF_BROKER_URL"
|
||||||
envLogLevel = "MF_MONGO_WRITER_LOG_LEVEL"
|
envLogLevel = "MF_MONGO_WRITER_LOG_LEVEL"
|
||||||
envPort = "MF_MONGO_WRITER_PORT"
|
envPort = "MF_MONGO_WRITER_PORT"
|
||||||
envDB = "MF_MONGO_WRITER_DB"
|
envDB = "MF_MONGO_WRITER_DB"
|
||||||
@ -47,7 +47,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
natsURL string
|
brokerURL string
|
||||||
logLevel string
|
logLevel string
|
||||||
port string
|
port string
|
||||||
dbName string
|
dbName string
|
||||||
@ -66,9 +66,9 @@ func main() {
|
|||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
pubSub, err := nats.NewPubSub(cfg.natsURL, "", logger)
|
pubSub, err := brokers.NewPubSub(cfg.brokerURL, "", logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to connect to NATS: %s", err))
|
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer pubSub.Close()
|
defer pubSub.Close()
|
||||||
@ -112,7 +112,7 @@ func main() {
|
|||||||
|
|
||||||
func loadConfigs() config {
|
func loadConfigs() config {
|
||||||
return config{
|
return config{
|
||||||
natsURL: mainflux.Env(envNatsURL, defNatsURL),
|
brokerURL: mainflux.Env(envBrokerURL, defBrokerURL),
|
||||||
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
||||||
port: mainflux.Env(envPort, defPort),
|
port: mainflux.Env(envPort, defPort),
|
||||||
dbName: mainflux.Env(envDB, defDB),
|
dbName: mainflux.Env(envDB, defDB),
|
||||||
|
102
cmd/mqtt/main.go
102
cmd/mqtt/main.go
@ -20,8 +20,8 @@ import (
|
|||||||
"github.com/mainflux/mainflux/pkg/auth"
|
"github.com/mainflux/mainflux/pkg/auth"
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging"
|
"github.com/mainflux/mainflux/pkg/messaging"
|
||||||
|
"github.com/mainflux/mainflux/pkg/messaging/brokers"
|
||||||
mqttpub "github.com/mainflux/mainflux/pkg/messaging/mqtt"
|
mqttpub "github.com/mainflux/mainflux/pkg/messaging/mqtt"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
|
||||||
thingsapi "github.com/mainflux/mainflux/things/api/auth/grpc"
|
thingsapi "github.com/mainflux/mainflux/things/api/auth/grpc"
|
||||||
mp "github.com/mainflux/mproxy/pkg/mqtt"
|
mp "github.com/mainflux/mproxy/pkg/mqtt"
|
||||||
"github.com/mainflux/mproxy/pkg/session"
|
"github.com/mainflux/mproxy/pkg/session"
|
||||||
@ -35,62 +35,54 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
svcName = "mqtt"
|
svcName = "mqtt"
|
||||||
// Logging
|
|
||||||
defLogLevel = "error"
|
defLogLevel = "error"
|
||||||
envLogLevel = "MF_MQTT_ADAPTER_LOG_LEVEL"
|
|
||||||
// MQTT
|
|
||||||
defMQTTPort = "1883"
|
defMQTTPort = "1883"
|
||||||
defMQTTTargetHost = "0.0.0.0"
|
defMQTTTargetHost = "0.0.0.0"
|
||||||
defMQTTTargetPort = "1883"
|
defMQTTTargetPort = "1883"
|
||||||
defMQTTForwarderTimeout = "30s" // 30 seconds
|
defMQTTForwarderTimeout = "30s" // 30 seconds
|
||||||
defMQTTTargetHealthCheck = ""
|
defMQTTTargetHealthCheck = ""
|
||||||
|
defHTTPPort = "8080"
|
||||||
|
defHTTPTargetHost = "localhost"
|
||||||
|
defHTTPTargetPort = "8080"
|
||||||
|
defHTTPTargetPath = "/mqtt"
|
||||||
|
defThingsAuthURL = "localhost:8183"
|
||||||
|
defThingsAuthTimeout = "1s"
|
||||||
|
defBrokerURL = "nats://localhost:4222"
|
||||||
|
defJaegerURL = ""
|
||||||
|
defClientTLS = "false"
|
||||||
|
defCACerts = ""
|
||||||
|
defInstance = ""
|
||||||
|
defESURL = "localhost:6379"
|
||||||
|
defESPass = ""
|
||||||
|
defESDB = "0"
|
||||||
|
defAuthcacheURL = "localhost:6379"
|
||||||
|
defAuthCachePass = ""
|
||||||
|
defAuthCacheDB = "0"
|
||||||
|
|
||||||
|
envLogLevel = "MF_MQTT_ADAPTER_LOG_LEVEL"
|
||||||
envMQTTPort = "MF_MQTT_ADAPTER_MQTT_PORT"
|
envMQTTPort = "MF_MQTT_ADAPTER_MQTT_PORT"
|
||||||
envMQTTTargetHost = "MF_MQTT_ADAPTER_MQTT_TARGET_HOST"
|
envMQTTTargetHost = "MF_MQTT_ADAPTER_MQTT_TARGET_HOST"
|
||||||
envMQTTTargetPort = "MF_MQTT_ADAPTER_MQTT_TARGET_PORT"
|
envMQTTTargetPort = "MF_MQTT_ADAPTER_MQTT_TARGET_PORT"
|
||||||
envMQTTTargetHealthCheck = "MF_MQTT_ADAPTER_MQTT_TARGET_HEALTH_CHECK"
|
envMQTTTargetHealthCheck = "MF_MQTT_ADAPTER_MQTT_TARGET_HEALTH_CHECK"
|
||||||
envMQTTForwarderTimeout = "MF_MQTT_ADAPTER_FORWARDER_TIMEOUT"
|
envMQTTForwarderTimeout = "MF_MQTT_ADAPTER_FORWARDER_TIMEOUT"
|
||||||
// HTTP
|
envHTTPPort = "MF_MQTT_ADAPTER_WS_PORT"
|
||||||
defHTTPPort = "8080"
|
envHTTPTargetHost = "MF_MQTT_ADAPTER_WS_TARGET_HOST"
|
||||||
defHTTPTargetHost = "localhost"
|
envHTTPTargetPort = "MF_MQTT_ADAPTER_WS_TARGET_PORT"
|
||||||
defHTTPTargetPort = "8080"
|
envHTTPTargetPath = "MF_MQTT_ADAPTER_WS_TARGET_PATH"
|
||||||
defHTTPTargetPath = "/mqtt"
|
envThingsAuthURL = "MF_THINGS_AUTH_GRPC_URL"
|
||||||
envHTTPPort = "MF_MQTT_ADAPTER_WS_PORT"
|
envThingsAuthTimeout = "MF_THINGS_AUTH_GRPC_TIMEOUT"
|
||||||
envHTTPTargetHost = "MF_MQTT_ADAPTER_WS_TARGET_HOST"
|
envBrokerURL = "MF_BROKER_URL"
|
||||||
envHTTPTargetPort = "MF_MQTT_ADAPTER_WS_TARGET_PORT"
|
envJaegerURL = "MF_JAEGER_URL"
|
||||||
envHTTPTargetPath = "MF_MQTT_ADAPTER_WS_TARGET_PATH"
|
envClientTLS = "MF_MQTT_ADAPTER_CLIENT_TLS"
|
||||||
// Things
|
envCACerts = "MF_MQTT_ADAPTER_CA_CERTS"
|
||||||
defThingsAuthURL = "localhost:8183"
|
envInstance = "MF_MQTT_ADAPTER_INSTANCE"
|
||||||
defThingsAuthTimeout = "1s"
|
envESURL = "MF_MQTT_ADAPTER_ES_URL"
|
||||||
envThingsAuthURL = "MF_THINGS_AUTH_GRPC_URL"
|
envESPass = "MF_MQTT_ADAPTER_ES_PASS"
|
||||||
envThingsAuthTimeout = "MF_THINGS_AUTH_GRPC_TIMEOUT"
|
envESDB = "MF_MQTT_ADAPTER_ES_DB"
|
||||||
// Nats
|
envAuthCacheURL = "MF_AUTH_CACHE_URL"
|
||||||
defNatsURL = "nats://localhost:4222"
|
envAuthCachePass = "MF_AUTH_CACHE_PASS"
|
||||||
envNatsURL = "MF_NATS_URL"
|
envAuthCacheDB = "MF_AUTH_CACHE_DB"
|
||||||
// Jaeger
|
|
||||||
defJaegerURL = ""
|
|
||||||
envJaegerURL = "MF_JAEGER_URL"
|
|
||||||
// TLS
|
|
||||||
defClientTLS = "false"
|
|
||||||
defCACerts = ""
|
|
||||||
envClientTLS = "MF_MQTT_ADAPTER_CLIENT_TLS"
|
|
||||||
envCACerts = "MF_MQTT_ADAPTER_CA_CERTS"
|
|
||||||
// Instance
|
|
||||||
envInstance = "MF_MQTT_ADAPTER_INSTANCE"
|
|
||||||
defInstance = ""
|
|
||||||
// ES
|
|
||||||
envESURL = "MF_MQTT_ADAPTER_ES_URL"
|
|
||||||
envESPass = "MF_MQTT_ADAPTER_ES_PASS"
|
|
||||||
envESDB = "MF_MQTT_ADAPTER_ES_DB"
|
|
||||||
defESURL = "localhost:6379"
|
|
||||||
defESPass = ""
|
|
||||||
defESDB = "0"
|
|
||||||
// Auth cache
|
|
||||||
envAuthCacheURL = "MF_AUTH_CACHE_URL"
|
|
||||||
envAuthCachePass = "MF_AUTH_CACHE_PASS"
|
|
||||||
envAuthCacheDB = "MF_AUTH_CACHE_DB"
|
|
||||||
defAuthcacheURL = "localhost:6379"
|
|
||||||
defAuthCachePass = ""
|
|
||||||
defAuthCacheDB = "0"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
@ -108,7 +100,7 @@ type config struct {
|
|||||||
thingsURL string
|
thingsURL string
|
||||||
thingsAuthURL string
|
thingsAuthURL string
|
||||||
thingsAuthTimeout time.Duration
|
thingsAuthTimeout time.Duration
|
||||||
natsURL string
|
brokerURL string
|
||||||
clientTLS bool
|
clientTLS bool
|
||||||
caCerts string
|
caCerts string
|
||||||
instance string
|
instance string
|
||||||
@ -148,9 +140,9 @@ func main() {
|
|||||||
ec := connectToRedis(cfg.esURL, cfg.esPass, cfg.esDB, logger)
|
ec := connectToRedis(cfg.esURL, cfg.esPass, cfg.esDB, logger)
|
||||||
defer ec.Close()
|
defer ec.Close()
|
||||||
|
|
||||||
nps, err := nats.NewPubSub(cfg.natsURL, "mqtt", logger)
|
nps, err := brokers.NewPubSub(cfg.brokerURL, "mqtt", logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to connect to NATS: %s", err))
|
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer nps.Close()
|
defer nps.Close()
|
||||||
@ -161,15 +153,15 @@ func main() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
fwd := mqtt.NewForwarder(nats.SubjectAllChannels, logger)
|
fwd := mqtt.NewForwarder(brokers.SubjectAllChannels, logger)
|
||||||
if err := fwd.Forward(svcName, nps, mpub); err != nil {
|
if err := fwd.Forward(svcName, nps, mpub); err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to forward NATS messages: %s", err))
|
logger.Error(fmt.Sprintf("Failed to forward message broker messages: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
np, err := nats.NewPublisher(cfg.natsURL)
|
np, err := brokers.NewPublisher(cfg.brokerURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to connect to NATS: %s", err))
|
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer np.Close()
|
defer np.Close()
|
||||||
@ -241,7 +233,7 @@ func loadConfig() config {
|
|||||||
thingsAuthURL: mainflux.Env(envThingsAuthURL, defThingsAuthURL),
|
thingsAuthURL: mainflux.Env(envThingsAuthURL, defThingsAuthURL),
|
||||||
thingsAuthTimeout: authTimeout,
|
thingsAuthTimeout: authTimeout,
|
||||||
thingsURL: mainflux.Env(envThingsAuthURL, defThingsAuthURL),
|
thingsURL: mainflux.Env(envThingsAuthURL, defThingsAuthURL),
|
||||||
natsURL: mainflux.Env(envNatsURL, defNatsURL),
|
brokerURL: mainflux.Env(envBrokerURL, defBrokerURL),
|
||||||
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
||||||
clientTLS: tls,
|
clientTLS: tls,
|
||||||
caCerts: mainflux.Env(envCACerts, defCACerts),
|
caCerts: mainflux.Env(envCACerts, defCACerts),
|
||||||
|
@ -21,7 +21,7 @@ import (
|
|||||||
"github.com/mainflux/mainflux/opcua/gopcua"
|
"github.com/mainflux/mainflux/opcua/gopcua"
|
||||||
"github.com/mainflux/mainflux/opcua/redis"
|
"github.com/mainflux/mainflux/opcua/redis"
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
"github.com/mainflux/mainflux/pkg/messaging/brokers"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
|
|
||||||
kitprometheus "github.com/go-kit/kit/metrics/prometheus"
|
kitprometheus "github.com/go-kit/kit/metrics/prometheus"
|
||||||
@ -38,7 +38,7 @@ const (
|
|||||||
defOPCMode = ""
|
defOPCMode = ""
|
||||||
defOPCCertFile = ""
|
defOPCCertFile = ""
|
||||||
defOPCKeyFile = ""
|
defOPCKeyFile = ""
|
||||||
defNatsURL = "nats://localhost:4222"
|
defBrokerURL = "nats://localhost:4222"
|
||||||
defESURL = "localhost:6379"
|
defESURL = "localhost:6379"
|
||||||
defESPass = ""
|
defESPass = ""
|
||||||
defESDB = "0"
|
defESDB = "0"
|
||||||
@ -54,7 +54,7 @@ const (
|
|||||||
envOPCMode = "MF_OPCUA_ADAPTER_MODE"
|
envOPCMode = "MF_OPCUA_ADAPTER_MODE"
|
||||||
envOPCCertFile = "MF_OPCUA_ADAPTER_CERT_FILE"
|
envOPCCertFile = "MF_OPCUA_ADAPTER_CERT_FILE"
|
||||||
envOPCKeyFile = "MF_OPCUA_ADAPTER_KEY_FILE"
|
envOPCKeyFile = "MF_OPCUA_ADAPTER_KEY_FILE"
|
||||||
envNatsURL = "MF_NATS_URL"
|
envBrokerURL = "MF_BROKER_URL"
|
||||||
envESURL = "MF_THINGS_ES_URL"
|
envESURL = "MF_THINGS_ES_URL"
|
||||||
envESPass = "MF_THINGS_ES_PASS"
|
envESPass = "MF_THINGS_ES_PASS"
|
||||||
envESDB = "MF_THINGS_ES_DB"
|
envESDB = "MF_THINGS_ES_DB"
|
||||||
@ -71,7 +71,7 @@ const (
|
|||||||
type config struct {
|
type config struct {
|
||||||
httpPort string
|
httpPort string
|
||||||
opcuaConfig opcua.Config
|
opcuaConfig opcua.Config
|
||||||
natsURL string
|
brokerURL string
|
||||||
logLevel string
|
logLevel string
|
||||||
esURL string
|
esURL string
|
||||||
esPass string
|
esPass string
|
||||||
@ -102,9 +102,9 @@ func main() {
|
|||||||
esConn := connectToRedis(cfg.esURL, cfg.esPass, cfg.esDB, logger)
|
esConn := connectToRedis(cfg.esURL, cfg.esPass, cfg.esDB, logger)
|
||||||
defer esConn.Close()
|
defer esConn.Close()
|
||||||
|
|
||||||
pubSub, err := nats.NewPubSub(cfg.natsURL, "", logger)
|
pubSub, err := brokers.NewPubSub(cfg.brokerURL, "", logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to connect to NATS: %s", err))
|
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer pubSub.Close()
|
defer pubSub.Close()
|
||||||
@ -162,7 +162,7 @@ func loadConfig() config {
|
|||||||
return config{
|
return config{
|
||||||
httpPort: mainflux.Env(envHTTPPort, defHTTPPort),
|
httpPort: mainflux.Env(envHTTPPort, defHTTPPort),
|
||||||
opcuaConfig: oc,
|
opcuaConfig: oc,
|
||||||
natsURL: mainflux.Env(envNatsURL, defNatsURL),
|
brokerURL: mainflux.Env(envBrokerURL, defBrokerURL),
|
||||||
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
||||||
esURL: mainflux.Env(envESURL, defESURL),
|
esURL: mainflux.Env(envESURL, defESURL),
|
||||||
esPass: mainflux.Env(envESPass, defESPass),
|
esPass: mainflux.Env(envESPass, defESPass),
|
||||||
|
@ -19,7 +19,7 @@ import (
|
|||||||
"github.com/mainflux/mainflux/consumers/writers/postgres"
|
"github.com/mainflux/mainflux/consumers/writers/postgres"
|
||||||
"github.com/mainflux/mainflux/logger"
|
"github.com/mainflux/mainflux/logger"
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
"github.com/mainflux/mainflux/pkg/messaging/brokers"
|
||||||
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
)
|
)
|
||||||
@ -29,7 +29,7 @@ const (
|
|||||||
stopWaitTime = 5 * time.Second
|
stopWaitTime = 5 * time.Second
|
||||||
|
|
||||||
defLogLevel = "error"
|
defLogLevel = "error"
|
||||||
defNatsURL = "nats://localhost:4222"
|
defBrokerURL = "nats://localhost:4222"
|
||||||
defPort = "8180"
|
defPort = "8180"
|
||||||
defDBHost = "localhost"
|
defDBHost = "localhost"
|
||||||
defDBPort = "5432"
|
defDBPort = "5432"
|
||||||
@ -42,7 +42,7 @@ const (
|
|||||||
defDBSSLRootCert = ""
|
defDBSSLRootCert = ""
|
||||||
defConfigPath = "/config.toml"
|
defConfigPath = "/config.toml"
|
||||||
|
|
||||||
envNatsURL = "MF_NATS_URL"
|
envBrokerURL = "MF_BROKER_URL"
|
||||||
envLogLevel = "MF_POSTGRES_WRITER_LOG_LEVEL"
|
envLogLevel = "MF_POSTGRES_WRITER_LOG_LEVEL"
|
||||||
envPort = "MF_POSTGRES_WRITER_PORT"
|
envPort = "MF_POSTGRES_WRITER_PORT"
|
||||||
envDBHost = "MF_POSTGRES_WRITER_DB_HOST"
|
envDBHost = "MF_POSTGRES_WRITER_DB_HOST"
|
||||||
@ -58,7 +58,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
natsURL string
|
brokerURL string
|
||||||
logLevel string
|
logLevel string
|
||||||
port string
|
port string
|
||||||
configPath string
|
configPath string
|
||||||
@ -75,9 +75,9 @@ func main() {
|
|||||||
log.Fatalf(err.Error())
|
log.Fatalf(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
pubSub, err := nats.NewPubSub(cfg.natsURL, "", logger)
|
pubSub, err := brokers.NewPubSub(cfg.brokerURL, "", logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to connect to NATS: %s", err))
|
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer pubSub.Close()
|
defer pubSub.Close()
|
||||||
@ -123,7 +123,7 @@ func loadConfig() config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return config{
|
return config{
|
||||||
natsURL: mainflux.Env(envNatsURL, defNatsURL),
|
brokerURL: mainflux.Env(envBrokerURL, defBrokerURL),
|
||||||
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
||||||
port: mainflux.Env(envPort, defPort),
|
port: mainflux.Env(envPort, defPort),
|
||||||
configPath: mainflux.Env(envConfigPath, defConfigPath),
|
configPath: mainflux.Env(envConfigPath, defConfigPath),
|
||||||
|
@ -28,7 +28,7 @@ import (
|
|||||||
"github.com/mainflux/mainflux/consumers/notifiers/tracing"
|
"github.com/mainflux/mainflux/consumers/notifiers/tracing"
|
||||||
"github.com/mainflux/mainflux/logger"
|
"github.com/mainflux/mainflux/logger"
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
"github.com/mainflux/mainflux/pkg/messaging/brokers"
|
||||||
"github.com/mainflux/mainflux/pkg/ulid"
|
"github.com/mainflux/mainflux/pkg/ulid"
|
||||||
opentracing "github.com/opentracing/opentracing-go"
|
opentracing "github.com/opentracing/opentracing-go"
|
||||||
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
||||||
@ -56,7 +56,7 @@ const (
|
|||||||
defServerKey = ""
|
defServerKey = ""
|
||||||
defFrom = ""
|
defFrom = ""
|
||||||
defJaegerURL = ""
|
defJaegerURL = ""
|
||||||
defNatsURL = "nats://localhost:4222"
|
defBrokerURL = "nats://localhost:4222"
|
||||||
|
|
||||||
defSmppAddress = ""
|
defSmppAddress = ""
|
||||||
defSmppUsername = ""
|
defSmppUsername = ""
|
||||||
@ -88,7 +88,7 @@ const (
|
|||||||
envServerKey = "MF_SMPP_NOTIFIER_SERVER_KEY"
|
envServerKey = "MF_SMPP_NOTIFIER_SERVER_KEY"
|
||||||
envFrom = "MF_SMPP_NOTIFIER_SOURCE_ADDR"
|
envFrom = "MF_SMPP_NOTIFIER_SOURCE_ADDR"
|
||||||
envJaegerURL = "MF_JAEGER_URL"
|
envJaegerURL = "MF_JAEGER_URL"
|
||||||
envNatsURL = "MF_NATS_URL"
|
envBrokerURL = "MF_BROKER_URL"
|
||||||
|
|
||||||
envSmppAddress = "MF_SMPP_ADDRESS"
|
envSmppAddress = "MF_SMPP_ADDRESS"
|
||||||
envSmppUsername = "MF_SMPP_USERNAME"
|
envSmppUsername = "MF_SMPP_USERNAME"
|
||||||
@ -106,7 +106,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
natsURL string
|
brokerURL string
|
||||||
configPath string
|
configPath string
|
||||||
logLevel string
|
logLevel string
|
||||||
dbConfig postgres.Config
|
dbConfig postgres.Config
|
||||||
@ -135,9 +135,9 @@ func main() {
|
|||||||
db := connectToDB(cfg.dbConfig, logger)
|
db := connectToDB(cfg.dbConfig, logger)
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
|
|
||||||
pubSub, err := nats.NewPubSub(cfg.natsURL, "", logger)
|
pubSub, err := brokers.NewPubSub(cfg.brokerURL, "", logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to connect to NATS: %s", err))
|
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer pubSub.Close()
|
defer pubSub.Close()
|
||||||
@ -233,7 +233,7 @@ func loadConfig() config {
|
|||||||
|
|
||||||
return config{
|
return config{
|
||||||
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
||||||
natsURL: mainflux.Env(envNatsURL, defNatsURL),
|
brokerURL: mainflux.Env(envBrokerURL, defBrokerURL),
|
||||||
configPath: mainflux.Env(envConfigPath, defConfigPath),
|
configPath: mainflux.Env(envConfigPath, defConfigPath),
|
||||||
dbConfig: dbConfig,
|
dbConfig: dbConfig,
|
||||||
smppConf: smppConf,
|
smppConf: smppConf,
|
||||||
|
@ -27,7 +27,7 @@ import (
|
|||||||
"github.com/mainflux/mainflux/internal/email"
|
"github.com/mainflux/mainflux/internal/email"
|
||||||
"github.com/mainflux/mainflux/logger"
|
"github.com/mainflux/mainflux/logger"
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
"github.com/mainflux/mainflux/pkg/messaging/brokers"
|
||||||
"github.com/mainflux/mainflux/pkg/ulid"
|
"github.com/mainflux/mainflux/pkg/ulid"
|
||||||
opentracing "github.com/opentracing/opentracing-go"
|
opentracing "github.com/opentracing/opentracing-go"
|
||||||
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
||||||
@ -56,7 +56,7 @@ const (
|
|||||||
defServerKey = ""
|
defServerKey = ""
|
||||||
defFrom = ""
|
defFrom = ""
|
||||||
defJaegerURL = ""
|
defJaegerURL = ""
|
||||||
defNatsURL = "nats://localhost:4222"
|
defBrokerURL = "nats://localhost:4222"
|
||||||
|
|
||||||
defEmailHost = "localhost"
|
defEmailHost = "localhost"
|
||||||
defEmailPort = "25"
|
defEmailPort = "25"
|
||||||
@ -87,7 +87,7 @@ const (
|
|||||||
envServerKey = "MF_SMTP_NOTIFIER_SERVER_KEY"
|
envServerKey = "MF_SMTP_NOTIFIER_SERVER_KEY"
|
||||||
envFrom = "MF_SMTP_NOTIFIER_FROM_ADDR"
|
envFrom = "MF_SMTP_NOTIFIER_FROM_ADDR"
|
||||||
envJaegerURL = "MF_JAEGER_URL"
|
envJaegerURL = "MF_JAEGER_URL"
|
||||||
envNatsURL = "MF_NATS_URL"
|
envBrokerURL = "MF_BROKER_URL"
|
||||||
|
|
||||||
envEmailHost = "MF_EMAIL_HOST"
|
envEmailHost = "MF_EMAIL_HOST"
|
||||||
envEmailPort = "MF_EMAIL_PORT"
|
envEmailPort = "MF_EMAIL_PORT"
|
||||||
@ -104,7 +104,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
natsURL string
|
brokerURL string
|
||||||
configPath string
|
configPath string
|
||||||
logLevel string
|
logLevel string
|
||||||
dbConfig postgres.Config
|
dbConfig postgres.Config
|
||||||
@ -133,9 +133,9 @@ func main() {
|
|||||||
db := connectToDB(cfg.dbConfig, logger)
|
db := connectToDB(cfg.dbConfig, logger)
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
|
|
||||||
pubSub, err := nats.NewPubSub(cfg.natsURL, "", logger)
|
pubSub, err := brokers.NewPubSub(cfg.brokerURL, "", logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to connect to NATS: %s", err))
|
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer pubSub.Close()
|
defer pubSub.Close()
|
||||||
@ -213,7 +213,7 @@ func loadConfig() config {
|
|||||||
|
|
||||||
return config{
|
return config{
|
||||||
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
||||||
natsURL: mainflux.Env(envNatsURL, defNatsURL),
|
brokerURL: mainflux.Env(envBrokerURL, defBrokerURL),
|
||||||
configPath: mainflux.Env(envConfigPath, defConfigPath),
|
configPath: mainflux.Env(envConfigPath, defConfigPath),
|
||||||
dbConfig: dbConfig,
|
dbConfig: dbConfig,
|
||||||
emailConf: emailConf,
|
emailConf: emailConf,
|
||||||
|
@ -19,7 +19,7 @@ import (
|
|||||||
"github.com/mainflux/mainflux/consumers/writers/timescale"
|
"github.com/mainflux/mainflux/consumers/writers/timescale"
|
||||||
"github.com/mainflux/mainflux/logger"
|
"github.com/mainflux/mainflux/logger"
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
"github.com/mainflux/mainflux/pkg/messaging/brokers"
|
||||||
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
)
|
)
|
||||||
@ -29,7 +29,7 @@ const (
|
|||||||
stopWaitTime = 5 * time.Second
|
stopWaitTime = 5 * time.Second
|
||||||
|
|
||||||
defLogLevel = "error"
|
defLogLevel = "error"
|
||||||
defNatsURL = "nats://localhost:4222"
|
defBrokerURL = "nats://localhost:4222"
|
||||||
defPort = "8180"
|
defPort = "8180"
|
||||||
defDBHost = "localhost"
|
defDBHost = "localhost"
|
||||||
defDBPort = "5432"
|
defDBPort = "5432"
|
||||||
@ -42,7 +42,7 @@ const (
|
|||||||
defDBSSLRootCert = ""
|
defDBSSLRootCert = ""
|
||||||
defConfigPath = "/config.toml"
|
defConfigPath = "/config.toml"
|
||||||
|
|
||||||
envNatsURL = "MF_NATS_URL"
|
envBrokerURL = "MF_BROKER_URL"
|
||||||
envLogLevel = "MF_TIMESCALE_WRITER_LOG_LEVEL"
|
envLogLevel = "MF_TIMESCALE_WRITER_LOG_LEVEL"
|
||||||
envPort = "MF_TIMESCALE_WRITER_PORT"
|
envPort = "MF_TIMESCALE_WRITER_PORT"
|
||||||
envDBHost = "MF_TIMESCALE_WRITER_DB_HOST"
|
envDBHost = "MF_TIMESCALE_WRITER_DB_HOST"
|
||||||
@ -58,7 +58,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
natsURL string
|
brokerURL string
|
||||||
logLevel string
|
logLevel string
|
||||||
port string
|
port string
|
||||||
configPath string
|
configPath string
|
||||||
@ -75,9 +75,9 @@ func main() {
|
|||||||
log.Fatalf(err.Error())
|
log.Fatalf(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
pubSub, err := nats.NewPubSub(cfg.natsURL, "", logger)
|
pubSub, err := brokers.NewPubSub(cfg.brokerURL, "", logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to connect to NATS: %s", err))
|
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer pubSub.Close()
|
defer pubSub.Close()
|
||||||
@ -122,7 +122,7 @@ func loadConfig() config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return config{
|
return config{
|
||||||
natsURL: mainflux.Env(envNatsURL, defNatsURL),
|
brokerURL: mainflux.Env(envBrokerURL, defBrokerURL),
|
||||||
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
logLevel: mainflux.Env(envLogLevel, defLogLevel),
|
||||||
port: mainflux.Env(envPort, defPort),
|
port: mainflux.Env(envPort, defPort),
|
||||||
configPath: mainflux.Env(envConfigPath, defConfigPath),
|
configPath: mainflux.Env(envConfigPath, defConfigPath),
|
||||||
|
@ -21,7 +21,7 @@ import (
|
|||||||
"github.com/mainflux/mainflux/logger"
|
"github.com/mainflux/mainflux/logger"
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging"
|
"github.com/mainflux/mainflux/pkg/messaging"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
"github.com/mainflux/mainflux/pkg/messaging/brokers"
|
||||||
"github.com/mainflux/mainflux/pkg/uuid"
|
"github.com/mainflux/mainflux/pkg/uuid"
|
||||||
localusers "github.com/mainflux/mainflux/things/standalone"
|
localusers "github.com/mainflux/mainflux/things/standalone"
|
||||||
"github.com/mainflux/mainflux/twins"
|
"github.com/mainflux/mainflux/twins"
|
||||||
@ -59,7 +59,7 @@ const (
|
|||||||
defClientTLS = "false"
|
defClientTLS = "false"
|
||||||
defCACerts = ""
|
defCACerts = ""
|
||||||
defChannelID = ""
|
defChannelID = ""
|
||||||
defNatsURL = "nats://localhost:4222"
|
defBrokerURL = "nats://localhost:4222"
|
||||||
defAuthURL = "localhost:8181"
|
defAuthURL = "localhost:8181"
|
||||||
defAuthTimeout = "1s"
|
defAuthTimeout = "1s"
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ const (
|
|||||||
envClientTLS = "MF_TWINS_CLIENT_TLS"
|
envClientTLS = "MF_TWINS_CLIENT_TLS"
|
||||||
envCACerts = "MF_TWINS_CA_CERTS"
|
envCACerts = "MF_TWINS_CA_CERTS"
|
||||||
envChannelID = "MF_TWINS_CHANNEL_ID"
|
envChannelID = "MF_TWINS_CHANNEL_ID"
|
||||||
envNatsURL = "MF_NATS_URL"
|
envBrokerURL = "MF_BROKER_URL"
|
||||||
envAuthURL = "MF_AUTH_GRPC_URL"
|
envAuthURL = "MF_AUTH_GRPC_URL"
|
||||||
envAuthTimeout = "MF_AUTH_GRPC_TIMEOUT"
|
envAuthTimeout = "MF_AUTH_GRPC_TIMEOUT"
|
||||||
)
|
)
|
||||||
@ -99,7 +99,7 @@ type config struct {
|
|||||||
clientTLS bool
|
clientTLS bool
|
||||||
caCerts string
|
caCerts string
|
||||||
channelID string
|
channelID string
|
||||||
natsURL string
|
brokerURL string
|
||||||
|
|
||||||
authURL string
|
authURL string
|
||||||
authTimeout time.Duration
|
authTimeout time.Duration
|
||||||
@ -131,9 +131,9 @@ func main() {
|
|||||||
defer authCloser.Close()
|
defer authCloser.Close()
|
||||||
auth, _ := createAuthClient(cfg, authTracer, logger)
|
auth, _ := createAuthClient(cfg, authTracer, logger)
|
||||||
|
|
||||||
pubSub, err := nats.NewPubSub(cfg.natsURL, queue, logger)
|
pubSub, err := brokers.NewPubSub(cfg.brokerURL, queue, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("Failed to connect to NATS: %s", err))
|
logger.Error(fmt.Sprintf("Failed to connect to message broker: %s", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer pubSub.Close()
|
defer pubSub.Close()
|
||||||
@ -192,7 +192,7 @@ func loadConfig() config {
|
|||||||
clientTLS: tls,
|
clientTLS: tls,
|
||||||
caCerts: mainflux.Env(envCACerts, defCACerts),
|
caCerts: mainflux.Env(envCACerts, defCACerts),
|
||||||
channelID: mainflux.Env(envChannelID, defChannelID),
|
channelID: mainflux.Env(envChannelID, defChannelID),
|
||||||
natsURL: mainflux.Env(envNatsURL, defNatsURL),
|
brokerURL: mainflux.Env(envBrokerURL, defBrokerURL),
|
||||||
authURL: mainflux.Env(envAuthURL, defAuthURL),
|
authURL: mainflux.Env(envAuthURL, defAuthURL),
|
||||||
authTimeout: authTimeout,
|
authTimeout: authTimeout,
|
||||||
}
|
}
|
||||||
@ -298,12 +298,11 @@ func newService(id string, ps messaging.PubSub, chanID string, users mainflux.Au
|
|||||||
Help: "Total duration of requests in microseconds.",
|
Help: "Total duration of requests in microseconds.",
|
||||||
}, []string{"method"}),
|
}, []string{"method"}),
|
||||||
)
|
)
|
||||||
err := ps.Subscribe(id, nats.SubjectAllChannels, handle(logger, chanID, svc))
|
err := ps.Subscribe(id, brokers.SubjectAllChannels, handle(logger, chanID, svc))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(err.Error())
|
logger.Error(err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
return svc
|
return svc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ default values.
|
|||||||
| Variable | Description | Default |
|
| Variable | Description | Default |
|
||||||
|--------------------------------|--------------------------------------------------------|-----------------------|
|
|--------------------------------|--------------------------------------------------------|-----------------------|
|
||||||
| MF_COAP_ADAPTER_PORT | Service listening port | 5683 |
|
| MF_COAP_ADAPTER_PORT | Service listening port | 5683 |
|
||||||
| MF_NATS_URL | NATS instance URL | nats://localhost:4222 |
|
| MF_BROKER_URL | Message broker instance URL | nats://localhost:4222 |
|
||||||
| MF_COAP_ADAPTER_LOG_LEVEL | Service log level | error |
|
| MF_COAP_ADAPTER_LOG_LEVEL | Service log level | error |
|
||||||
| MF_COAP_ADAPTER_CLIENT_TLS | Flag that indicates if TLS should be turned on | false |
|
| MF_COAP_ADAPTER_CLIENT_TLS | Flag that indicates if TLS should be turned on | false |
|
||||||
| MF_COAP_ADAPTER_CA_CERTS | Path to trusted CAs in PEM format | |
|
| MF_COAP_ADAPTER_CA_CERTS | Path to trusted CAs in PEM format | |
|
||||||
@ -26,7 +26,7 @@ default values.
|
|||||||
The service itself is distributed as Docker container. Check the [`coap-adapter`](https://github.com/mainflux/mainflux/blob/master/docker/docker-compose.yml#L273-L291) service section in
|
The service itself is distributed as Docker container. Check the [`coap-adapter`](https://github.com/mainflux/mainflux/blob/master/docker/docker-compose.yml#L273-L291) service section in
|
||||||
docker-compose to see how service is deployed.
|
docker-compose to see how service is deployed.
|
||||||
|
|
||||||
Running this service outside of container requires working instance of the NATS service.
|
Running this service outside of container requires working instance of the message broker service.
|
||||||
To start the service outside of the container, execute the following shell script:
|
To start the service outside of the container, execute the following shell script:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@ -42,7 +42,7 @@ make coap
|
|||||||
make install
|
make install
|
||||||
|
|
||||||
# set the environment variables and run the service
|
# set the environment variables and run the service
|
||||||
MF_NATS_URL=[NATS instance URL] \
|
MF_BROKER_URL=[Message broker instance URL] \
|
||||||
MF_COAP_ADAPTER_PORT=[Service HTTP port] \
|
MF_COAP_ADAPTER_PORT=[Service HTTP port] \
|
||||||
MF_COAP_ADAPTER_LOG_LEVEL=[Service log level] \
|
MF_COAP_ADAPTER_LOG_LEVEL=[Service log level] \
|
||||||
MF_COAP_ADAPTER_CLIENT_TLS=[Flag that indicates if TLS should be turned on] \
|
MF_COAP_ADAPTER_CLIENT_TLS=[Flag that indicates if TLS should be turned on] \
|
||||||
|
@ -12,7 +12,6 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
|
||||||
|
|
||||||
"github.com/mainflux/mainflux"
|
"github.com/mainflux/mainflux"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging"
|
"github.com/mainflux/mainflux/pkg/messaging"
|
||||||
@ -41,12 +40,12 @@ var _ Service = (*adapterService)(nil)
|
|||||||
// Observers is a map of maps,
|
// Observers is a map of maps,
|
||||||
type adapterService struct {
|
type adapterService struct {
|
||||||
auth mainflux.ThingsServiceClient
|
auth mainflux.ThingsServiceClient
|
||||||
pubsub nats.PubSub
|
pubsub messaging.PubSub
|
||||||
obsLock sync.Mutex
|
obsLock sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
// New instantiates the CoAP adapter implementation.
|
// New instantiates the CoAP adapter implementation.
|
||||||
func New(auth mainflux.ThingsServiceClient, pubsub nats.PubSub) Service {
|
func New(auth mainflux.ThingsServiceClient, pubsub messaging.PubSub) Service {
|
||||||
as := &adapterService{
|
as := &adapterService{
|
||||||
auth: auth,
|
auth: auth,
|
||||||
pubsub: pubsub,
|
pubsub: pubsub,
|
||||||
|
@ -14,7 +14,7 @@ import (
|
|||||||
"github.com/mainflux/mainflux/logger"
|
"github.com/mainflux/mainflux/logger"
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
"github.com/mainflux/mainflux/pkg/errors"
|
||||||
"github.com/mainflux/mainflux/pkg/messaging"
|
"github.com/mainflux/mainflux/pkg/messaging"
|
||||||
pubsub "github.com/mainflux/mainflux/pkg/messaging/nats"
|
"github.com/mainflux/mainflux/pkg/messaging/brokers"
|
||||||
"github.com/mainflux/mainflux/pkg/transformers"
|
"github.com/mainflux/mainflux/pkg/transformers"
|
||||||
"github.com/mainflux/mainflux/pkg/transformers/json"
|
"github.com/mainflux/mainflux/pkg/transformers/json"
|
||||||
"github.com/mainflux/mainflux/pkg/transformers/senml"
|
"github.com/mainflux/mainflux/pkg/transformers/senml"
|
||||||
@ -30,7 +30,7 @@ var (
|
|||||||
errParseConfFile = errors.New("unable to parse configuration file")
|
errParseConfFile = errors.New("unable to parse configuration file")
|
||||||
)
|
)
|
||||||
|
|
||||||
// Start method starts consuming messages received from NATS.
|
// Start method starts consuming messages received from Message broker.
|
||||||
// This method transforms messages to SenML format before
|
// This method transforms messages to SenML format before
|
||||||
// using MessageRepository to store them.
|
// using MessageRepository to store them.
|
||||||
func Start(id string, sub messaging.Subscriber, consumer Consumer, configPath string, logger logger.Logger) error {
|
func Start(id string, sub messaging.Subscriber, consumer Consumer, configPath string, logger logger.Logger) error {
|
||||||
@ -92,7 +92,7 @@ type config struct {
|
|||||||
func loadConfig(configPath string) (config, error) {
|
func loadConfig(configPath string) (config, error) {
|
||||||
cfg := config{
|
cfg := config{
|
||||||
SubscriberCfg: subscriberConfig{
|
SubscriberCfg: subscriberConfig{
|
||||||
Subjects: []string{pubsub.SubjectAllChannels},
|
Subjects: []string{brokers.SubjectAllChannels},
|
||||||
},
|
},
|
||||||
TransformerCfg: transformerConfig{
|
TransformerCfg: transformerConfig{
|
||||||
Format: defFormat,
|
Format: defFormat,
|
||||||
|
@ -25,7 +25,7 @@ default values.
|
|||||||
| MF_SMPP_NOTIFIER_SERVER_CERT | Path to server cert in pem format | |
|
| MF_SMPP_NOTIFIER_SERVER_CERT | Path to server cert in pem format | |
|
||||||
| MF_SMPP_NOTIFIER_SERVER_KEY | Path to server key in pem format | |
|
| MF_SMPP_NOTIFIER_SERVER_KEY | Path to server key in pem format | |
|
||||||
| MF_JAEGER_URL | Jaeger server URL | localhost:6831 |
|
| MF_JAEGER_URL | Jaeger server URL | localhost:6831 |
|
||||||
| MF_NATS_URL | NATS broker URL | nats://127.0.0.1:4222 |
|
| MF_BROKER_URL | Message broker URL | nats://127.0.0.1:4222 |
|
||||||
| MF_SMPP_ADDRESS | SMPP address [host:port] | |
|
| MF_SMPP_ADDRESS | SMPP address [host:port] | |
|
||||||
| MF_SMPP_USERNAME | SMPP Username | |
|
| MF_SMPP_USERNAME | SMPP Username | |
|
||||||
| MF_SMPP_PASSWORD | SMPP Password | |
|
| MF_SMPP_PASSWORD | SMPP Password | |
|
||||||
|
@ -16,7 +16,7 @@ default values.
|
|||||||
| MF_SMTP_NOTIFIER_DB_USER | Database user | mainflux |
|
| MF_SMTP_NOTIFIER_DB_USER | Database user | mainflux |
|
||||||
| MF_SMTP_NOTIFIER_DB_PASS | Database password | mainflux |
|
| MF_SMTP_NOTIFIER_DB_PASS | Database password | mainflux |
|
||||||
| MF_SMTP_NOTIFIER_DB | Name of the database used by the service | subscriptions |
|
| MF_SMTP_NOTIFIER_DB | Name of the database used by the service | subscriptions |
|
||||||
| MF_SMTP_NOTIFIER_CONFIG_PATH | Path to the config file with NATS subjects configuration | disable |
|
| MF_SMTP_NOTIFIER_CONFIG_PATH | Path to the config file with message broker subjects configuration | disable |
|
||||||
| MF_SMTP_NOTIFIER_DB_SSL_MODE | Database connection SSL mode (disable, require, verify-ca, verify-full) | |
|
| MF_SMTP_NOTIFIER_DB_SSL_MODE | Database connection SSL mode (disable, require, verify-ca, verify-full) | |
|
||||||
| MF_SMTP_NOTIFIER_DB_SSL_CERT | Path to the PEM encoded cert file | |
|
| MF_SMTP_NOTIFIER_DB_SSL_CERT | Path to the PEM encoded cert file | |
|
||||||
| MF_SMTP_NOTIFIER_DB_SSL_KEY | Path to the PEM encoded certificate key | |
|
| MF_SMTP_NOTIFIER_DB_SSL_KEY | Path to the PEM encoded certificate key | |
|
||||||
@ -25,7 +25,7 @@ default values.
|
|||||||
| MF_SMTP_NOTIFIER_SERVER_CERT | Path to server cert in pem format | |
|
| MF_SMTP_NOTIFIER_SERVER_CERT | Path to server cert in pem format | |
|
||||||
| MF_SMTP_NOTIFIER_SERVER_KEY | Path to server key in pem format | |
|
| MF_SMTP_NOTIFIER_SERVER_KEY | Path to server key in pem format | |
|
||||||
| MF_JAEGER_URL | Jaeger server URL | localhost:6831 |
|
| MF_JAEGER_URL | Jaeger server URL | localhost:6831 |
|
||||||
| MF_NATS_URL | NATS broker URL | nats://127.0.0.1:4222 |
|
| MF_BROKER_URL | Message broker URL | nats://127.0.0.1:4222 |
|
||||||
| MF_EMAIL_HOST | Mail server host | localhost |
|
| MF_EMAIL_HOST | Mail server host | localhost |
|
||||||
| MF_EMAIL_PORT | Mail server port | 25 |
|
| MF_EMAIL_PORT | Mail server port | 25 |
|
||||||
| MF_EMAIL_USERNAME | Mail server username | |
|
| MF_EMAIL_USERNAME | Mail server username | |
|
||||||
|
@ -10,7 +10,7 @@ default values.
|
|||||||
|
|
||||||
| Variable | Description | Default |
|
| Variable | Description | Default |
|
||||||
| -------------------------------- | ----------------------------------------------------------------------- | --------------------- |
|
| -------------------------------- | ----------------------------------------------------------------------- | --------------------- |
|
||||||
| MF_NATS_URL | NATS instance URL | nats://localhost:4222 |
|
| MF_BROKER_URL | Message broker instance URL | nats://localhost:4222 |
|
||||||
| MF_CASSANDRA_WRITER_LOG_LEVEL | Log level for Cassandra writer (debug, info, warn, error) | error |
|
| MF_CASSANDRA_WRITER_LOG_LEVEL | Log level for Cassandra writer (debug, info, warn, error) | error |
|
||||||
| MF_CASSANDRA_WRITER_PORT | Service HTTP port | 8180 |
|
| MF_CASSANDRA_WRITER_PORT | Service HTTP port | 8180 |
|
||||||
| MF_CASSANDRA_WRITER_DB_CLUSTER | Cassandra cluster comma separated addresses | 127.0.0.1 |
|
| MF_CASSANDRA_WRITER_DB_CLUSTER | Cassandra cluster comma separated addresses | 127.0.0.1 |
|
||||||
@ -38,7 +38,7 @@ make cassandra-writer
|
|||||||
make install
|
make install
|
||||||
|
|
||||||
# Set the environment variables and run the service
|
# Set the environment variables and run the service
|
||||||
MF_NATS_URL=[NATS instance URL] \
|
MF_BROKER_URL=[NATS instance URL] \
|
||||||
MF_CASSANDRA_WRITER_LOG_LEVEL=[Cassandra writer log level] \
|
MF_CASSANDRA_WRITER_LOG_LEVEL=[Cassandra writer log level] \
|
||||||
MF_CASSANDRA_WRITER_PORT=[Service HTTP port] \
|
MF_CASSANDRA_WRITER_PORT=[Service HTTP port] \
|
||||||
MF_CASSANDRA_WRITER_DB_CLUSTER=[Cassandra cluster comma separated addresses] \
|
MF_CASSANDRA_WRITER_DB_CLUSTER=[Cassandra cluster comma separated addresses] \
|
||||||
|
@ -8,17 +8,17 @@ The service is configured using the environment variables presented in the
|
|||||||
following table. Note that any unset variables will be replaced with their
|
following table. Note that any unset variables will be replaced with their
|
||||||
default values.
|
default values.
|
||||||
|
|
||||||
| Variable | Description | Default |
|
| Variable | Description | Default |
|
||||||
| ----------------------------- | ----------------------------------------------------------------------- | ---------------------- |
|
| ----------------------------- | --------------------------------------------------------------------------------- | ---------------------- |
|
||||||
| MF_NATS_URL | NATS instance URL | nats://localhost:4222 |
|
| MF_BROKER_URL | Message broker instance URL | nats://localhost:4222 |
|
||||||
| MF_INFLUX_WRITER_LOG_LEVEL | Log level for InfluxDB writer (debug, info, warn, error) | error |
|
| MF_INFLUX_WRITER_LOG_LEVEL | Log level for InfluxDB writer (debug, info, warn, error) | error |
|
||||||
| MF_INFLUX_WRITER_PORT | Service HTTP port | 8180 |
|
| MF_INFLUX_WRITER_PORT | Service HTTP port | 8180 |
|
||||||
| MF_INFLUXDB_HOST | InfluxDB host | localhost |
|
| MF_INFLUX_WRITER_DB_HOST | InfluxDB host | localhost |
|
||||||
| MF_INFLUXDB_PORT | Default port of InfluxDB database | 8086 |
|
| MF_INFLUXDB_PORT | Default port of InfluxDB database | 8086 |
|
||||||
| MF_INFLUXDB_ADMIN_USER | Default user of InfluxDB database | mainflux |
|
| MF_INFLUXDB_ADMIN_USER | Default user of InfluxDB database | mainflux |
|
||||||
| MF_INFLUXDB_ADMIN_PASSWORD | Default password of InfluxDB user | mainflux |
|
| MF_INFLUXDB_ADMIN_PASSWORD | Default password of InfluxDB user | mainflux |
|
||||||
| MF_INFLUXDB_DB | InfluxDB database name | mainflux |
|
| MF_INFLUXDB_DB | InfluxDB database name | mainflux |
|
||||||
| MF_INFLUX_WRITER_CONFIG_PATH | Config file path with NATS subjects list, payload type and content-type | /configs.toml |
|
| MF_INFLUX_WRITER_CONFIG_PATH | Config file path with message broker subjects list, payload type and content-type | /configs.toml |
|
||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ make influxdb
|
|||||||
make install
|
make install
|
||||||
|
|
||||||
# Set the environment variables and run the service
|
# Set the environment variables and run the service
|
||||||
MF_NATS_URL=[NATS instance URL] \
|
MF_BROKER_URL=[Message broker instance URL] \
|
||||||
MF_INFLUX_WRITER_LOG_LEVEL=[Influx writer log level] \
|
MF_INFLUX_WRITER_LOG_LEVEL=[Influx writer log level] \
|
||||||
MF_INFLUX_WRITER_PORT=[Service HTTP port] \
|
MF_INFLUX_WRITER_PORT=[Service HTTP port] \
|
||||||
MF_INFLUXDB_DB=[InfluxDB database name] \
|
MF_INFLUXDB_DB=[InfluxDB database name] \
|
||||||
@ -47,7 +47,7 @@ MF_INFLUXDB_HOST=[InfluxDB database host] \
|
|||||||
MF_INFLUXDB_PORT=[InfluxDB database port] \
|
MF_INFLUXDB_PORT=[InfluxDB database port] \
|
||||||
MF_INFLUXDB_ADMIN_USER=[InfluxDB admin user] \
|
MF_INFLUXDB_ADMIN_USER=[InfluxDB admin user] \
|
||||||
MF_INFLUXDB_ADMIN_PASSWORD=[InfluxDB admin password] \
|
MF_INFLUXDB_ADMIN_PASSWORD=[InfluxDB admin password] \
|
||||||
MF_INFLUX_WRITER_CONFIG_PATH=[Config file path with NATS subjects list, payload type and content-type] \
|
MF_INFLUX_WRITER_CONFIG_PATH=[Config file path with Message broker subjects list, payload type and content-type] \
|
||||||
$GOBIN/mainflux-influxdb
|
$GOBIN/mainflux-influxdb
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -8,15 +8,15 @@ The service is configured using the environment variables presented in the
|
|||||||
following table. Note that any unset variables will be replaced with their
|
following table. Note that any unset variables will be replaced with their
|
||||||
default values.
|
default values.
|
||||||
|
|
||||||
| Variable | Description | Default |
|
| Variable | Description | Default |
|
||||||
| ---------------------------- | ----------------------------------------------------------------------- | ---------------------- |
|
| ---------------------------- | --------------------------------------------------------------------------------- | ---------------------- |
|
||||||
| MF_NATS_URL | NATS instance URL | nats://localhost:4222 |
|
| MF_BROKER_URL | Message broker instance URL | nats://localhost:4222 |
|
||||||
| MF_MONGO_WRITER_LOG_LEVEL | Log level for MongoDB writer | error |
|
| MF_MONGO_WRITER_LOG_LEVEL | Log level for MongoDB writer | error |
|
||||||
| MF_MONGO_WRITER_PORT | Service HTTP port | 8180 |
|
| MF_MONGO_WRITER_PORT | Service HTTP port | 8180 |
|
||||||
| MF_MONGO_WRITER_DB | Default MongoDB database name | messages |
|
| MF_MONGO_WRITER_DB | Default MongoDB database name | messages |
|
||||||
| MF_MONGO_WRITER_DB_HOST | Default MongoDB database host | localhost |
|
| MF_MONGO_WRITER_DB_HOST | Default MongoDB database host | localhost |
|
||||||
| MF_MONGO_WRITER_DB_PORT | Default MongoDB database port | 27017 |
|
| MF_MONGO_WRITER_DB_PORT | Default MongoDB database port | 27017 |
|
||||||
| MF_MONGO_WRITER_CONFIG_PATH | Config file path with NATS subjects list, payload type and content-type | /config.toml |
|
| MF_MONGO_WRITER_CONFIG_PATH | Config file path with Message broker subjects list, payload type and content-type | /config.toml |
|
||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
@ -37,13 +37,13 @@ make mongodb-writer
|
|||||||
make install
|
make install
|
||||||
|
|
||||||
# Set the environment variables and run the service
|
# Set the environment variables and run the service
|
||||||
MF_NATS_URL=[NATS instance URL] \
|
MF_BROKER_URL=[Message broker instance URL] \
|
||||||
MF_MONGO_WRITER_LOG_LEVEL=[MongoDB writer log level] \
|
MF_MONGO_WRITER_LOG_LEVEL=[MongoDB writer log level] \
|
||||||
MF_MONGO_WRITER_PORT=[Service HTTP port] \
|
MF_MONGO_WRITER_PORT=[Service HTTP port] \
|
||||||
MF_MONGO_WRITER_DB=[MongoDB database name] \
|
MF_MONGO_WRITER_DB=[MongoDB database name] \
|
||||||
MF_MONGO_WRITER_DB_HOST=[MongoDB database host] \
|
MF_MONGO_WRITER_DB_HOST=[MongoDB database host] \
|
||||||
MF_MONGO_WRITER_DB_PORT=[MongoDB database port] \
|
MF_MONGO_WRITER_DB_PORT=[MongoDB database port] \
|
||||||
MF_MONGO_WRITER_CONFIG_PATH=[Configuration file path with NATS subjects list] \
|
MF_MONGO_WRITER_CONFIG_PATH=[Configuration file path with Message broker subjects list] \
|
||||||
$GOBIN/mainflux-mongodb-writer
|
$GOBIN/mainflux-mongodb-writer
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -8,21 +8,21 @@ The service is configured using the environment variables presented in the
|
|||||||
following table. Note that any unset variables will be replaced with their
|
following table. Note that any unset variables will be replaced with their
|
||||||
default values.
|
default values.
|
||||||
|
|
||||||
| Variable | Description | Default |
|
| Variable | Description | Default |
|
||||||
| ----------------------------------- | ----------------------------------------------------------------------- | ---------------------- |
|
| ----------------------------------- | --------------------------------------------------------------------------------- | ---------------------- |
|
||||||
| MF_NATS_URL | NATS instance URL | nats://localhost:4222 |
|
| MF_BROKER_URL | Message broker instance URL | nats://localhost:4222 |
|
||||||
| MF_POSTGRES_WRITER_LOG_LEVEL | Service log level | error |
|
| MF_POSTGRES_WRITER_LOG_LEVEL | Service log level | error |
|
||||||
| MF_POSTGRES_WRITER_PORT | Service HTTP port | 9104 |
|
| MF_POSTGRES_WRITER_PORT | Service HTTP port | 9104 |
|
||||||
| MF_POSTGRES_WRITER_DB_HOST | Postgres DB host | postgres |
|
| MF_POSTGRES_WRITER_DB_HOST | Postgres DB host | postgres |
|
||||||
| MF_POSTGRES_WRITER_DB_PORT | Postgres DB port | 5432 |
|
| MF_POSTGRES_WRITER_DB_PORT | Postgres DB port | 5432 |
|
||||||
| MF_POSTGRES_WRITER_DB_USER | Postgres user | mainflux |
|
| MF_POSTGRES_WRITER_DB_USER | Postgres user | mainflux |
|
||||||
| MF_POSTGRES_WRITER_DB_PASS | Postgres password | mainflux |
|
| MF_POSTGRES_WRITER_DB_PASS | Postgres password | mainflux |
|
||||||
| MF_POSTGRES_WRITER_DB | Postgres database name | messages |
|
| MF_POSTGRES_WRITER_DB | Postgres database name | messages |
|
||||||
| MF_POSTGRES_WRITER_DB_SSL_MODE | Postgres SSL mode | disabled |
|
| MF_POSTGRES_WRITER_DB_SSL_MODE | Postgres SSL mode | disabled |
|
||||||
| MF_POSTGRES_WRITER_DB_SSL_CERT | Postgres SSL certificate path | "" |
|
| MF_POSTGRES_WRITER_DB_SSL_CERT | Postgres SSL certificate path | "" |
|
||||||
| MF_POSTGRES_WRITER_DB_SSL_KEY | Postgres SSL key | "" |
|
| MF_POSTGRES_WRITER_DB_SSL_KEY | Postgres SSL key | "" |
|
||||||
| MF_POSTGRES_WRITER_DB_SSL_ROOT_CERT | Postgres SSL root certificate path | "" |
|
| MF_POSTGRES_WRITER_DB_SSL_ROOT_CERT | Postgres SSL root certificate path | "" |
|
||||||
| MF_POSTGRES_WRITER_CONFIG_PATH | Config file path with NATS subjects list, payload type and content-type | /config.toml |
|
| MF_POSTGRES_WRITER_CONFIG_PATH | Config file path with Message broker subjects list, payload type and content-type | /config.toml |
|
||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ make postgres-writer
|
|||||||
make install
|
make install
|
||||||
|
|
||||||
# Set the environment variables and run the service
|
# Set the environment variables and run the service
|
||||||
MF_NATS_URL=[NATS instance URL] \
|
MF_BROKER_URL=[Message broker instance URL] \
|
||||||
MF_POSTGRES_WRITER_LOG_LEVEL=[Service log level] \
|
MF_POSTGRES_WRITER_LOG_LEVEL=[Service log level] \
|
||||||
MF_POSTGRES_WRITER_PORT=[Service HTTP port] \
|
MF_POSTGRES_WRITER_PORT=[Service HTTP port] \
|
||||||
MF_POSTGRES_WRITER_DB_HOST=[Postgres host] \
|
MF_POSTGRES_WRITER_DB_HOST=[Postgres host] \
|
||||||
@ -55,7 +55,7 @@ MF_POSTGRES_WRITER_DB_SSL_MODE=[Postgres SSL mode] \
|
|||||||
MF_POSTGRES_WRITER_DB_SSL_CERT=[Postgres SSL cert] \
|
MF_POSTGRES_WRITER_DB_SSL_CERT=[Postgres SSL cert] \
|
||||||
MF_POSTGRES_WRITER_DB_SSL_KEY=[Postgres SSL key] \
|
MF_POSTGRES_WRITER_DB_SSL_KEY=[Postgres SSL key] \
|
||||||
MF_POSTGRES_WRITER_DB_SSL_ROOT_CERT=[Postgres SSL Root cert] \
|
MF_POSTGRES_WRITER_DB_SSL_ROOT_CERT=[Postgres SSL Root cert] \
|
||||||
MF_POSTGRES_WRITER_CONFIG_PATH=[Config file path with NATS subjects list, payload type and content-type] \
|
MF_POSTGRES_WRITER_CONFIG_PATH=[Config file path with Message broker subjects list, payload type and content-type] \
|
||||||
$GOBIN/mainflux-postgres-writer
|
$GOBIN/mainflux-postgres-writer
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -8,21 +8,21 @@ The service is configured using the environment variables presented in the
|
|||||||
following table. Note that any unset variables will be replaced with their
|
following table. Note that any unset variables will be replaced with their
|
||||||
default values.
|
default values.
|
||||||
|
|
||||||
| Variable | Description | Default |
|
| Variable | Description | Default |
|
||||||
| ----------------------------------- | ----------------------------------------------- | ---------------------- |
|
| ----------------------------------- | --------------------------------------------------------- | ---------------------- |
|
||||||
| MF_NATS_URL | NATS instance URL | nats://localhost:4222 |
|
| MF_BROKER_URL | Message broker instance URL | nats://localhost:4222 |
|
||||||
| MF_TIMESCALE_WRITER_LOG_LEVEL | Service log level | error |
|
| MF_TIMESCALE_WRITER_LOG_LEVEL | Service log level | error |
|
||||||
| MF_TIMESCALE_WRITER_PORT | Service HTTP port | 9104 |
|
| MF_TIMESCALE_WRITER_PORT | Service HTTP port | 9104 |
|
||||||
| MF_TIMESCALE_WRITER_DB_HOST | Timescale DB host | timescale |
|
| MF_TIMESCALE_WRITER_DB_HOST | Timescale DB host | timescale |
|
||||||
| MF_TIMESCALE_WRITER_DB_PORT | Timescale DB port | 5432 |
|
| MF_TIMESCALE_WRITER_DB_PORT | Timescale DB port | 5432 |
|
||||||
| MF_TIMESCALE_WRITER_DB_USER | Timescale user | mainflux |
|
| MF_TIMESCALE_WRITER_DB_USER | Timescale user | mainflux |
|
||||||
| MF_TIMESCALE_WRITER_DB_PASS | Timescale password | mainflux |
|
| MF_TIMESCALE_WRITER_DB_PASS | Timescale password | mainflux |
|
||||||
| MF_TIMESCALE_WRITER_DB | Timescale database name | messages |
|
| MF_TIMESCALE_WRITER_DB | Timescale database name | messages |
|
||||||
| MF_TIMESCALE_WRITER_DB_SSL_MODE | Timescale SSL mode | disabled |
|
| MF_TIMESCALE_WRITER_DB_SSL_MODE | Timescale SSL mode | disabled |
|
||||||
| MF_TIMESCALE_WRITER_DB_SSL_CERT | Timescale SSL certificate path | "" |
|
| MF_TIMESCALE_WRITER_DB_SSL_CERT | Timescale SSL certificate path | "" |
|
||||||
| MF_TIMESCALE_WRITER_DB_SSL_KEY | Timescale SSL key | "" |
|
| MF_TIMESCALE_WRITER_DB_SSL_KEY | Timescale SSL key | "" |
|
||||||
| MF_TIMESCALE_WRITER_DB_SSL_ROOT_CERT | Timescale SSL root certificate path | "" |
|
| MF_TIMESCALE_WRITER_DB_SSL_ROOT_CERT | Timescale SSL root certificate path | "" |
|
||||||
| MF_TIMESCALE_WRITER_CONFIG_PATH | Configuration file path with NATS subjects list | /config.toml |
|
| MF_TIMESCALE_WRITER_CONFIG_PATH | Configuration file path with Message broker subjects list | /config.toml |
|
||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ make timescale-writer
|
|||||||
make install
|
make install
|
||||||
|
|
||||||
# Set the environment variables and run the service
|
# Set the environment variables and run the service
|
||||||
MF_NATS_URL=[NATS instance URL] \
|
MF_BROKER_URL=[Message broker instance URL] \
|
||||||
MF_TIMESCALE_WRITER_LOG_LEVEL=[Service log level] \
|
MF_TIMESCALE_WRITER_LOG_LEVEL=[Service log level] \
|
||||||
MF_TIMESCALE_WRITER_PORT=[Service HTTP port] \
|
MF_TIMESCALE_WRITER_PORT=[Service HTTP port] \
|
||||||
MF_TIMESCALE_WRITER_DB_HOST=[Timescale host] \
|
MF_TIMESCALE_WRITER_DB_HOST=[Timescale host] \
|
||||||
@ -55,7 +55,7 @@ MF_TIMESCALE_WRITER_DB_SSL_MODE=[Timescale SSL mode] \
|
|||||||
MF_TIMESCALE_WRITER_DB_SSL_CERT=[Timescale SSL cert] \
|
MF_TIMESCALE_WRITER_DB_SSL_CERT=[Timescale SSL cert] \
|
||||||
MF_TIMESCALE_WRITER_DB_SSL_KEY=[Timescale SSL key] \
|
MF_TIMESCALE_WRITER_DB_SSL_KEY=[Timescale SSL key] \
|
||||||
MF_TIMESCALE_WRITER_DB_SSL_ROOT_CERT=[Timescale SSL Root cert] \
|
MF_TIMESCALE_WRITER_DB_SSL_ROOT_CERT=[Timescale SSL Root cert] \
|
||||||
MF_TIMESCALE_WRITER_CONFIG_PATH=[Configuration file path with NATS subjects list] \
|
MF_TIMESCALE_WRITER_CONFIG_PATH=[Configuration file path with Message broker subjects list] \
|
||||||
MF_TIMESCALE_WRITER_TRANSFORMER=[Message transformer type] \
|
MF_TIMESCALE_WRITER_TRANSFORMER=[Message transformer type] \
|
||||||
$GOBIN/mainflux-timescale-writer
|
$GOBIN/mainflux-timescale-writer
|
||||||
```
|
```
|
||||||
|
17
docker/.env
17
docker/.env
@ -6,8 +6,21 @@ MF_NGINX_SSL_PORT=443
|
|||||||
MF_NGINX_MQTT_PORT=1883
|
MF_NGINX_MQTT_PORT=1883
|
||||||
MF_NGINX_MQTTS_PORT=8883
|
MF_NGINX_MQTTS_PORT=8883
|
||||||
|
|
||||||
## NATS
|
# Message Broker
|
||||||
MF_NATS_URL=nats://nats:4222
|
MF_BROKER_TYPE=nats
|
||||||
|
|
||||||
|
## Nats
|
||||||
|
MF_NATS_PORT=4222
|
||||||
|
MF_NATS_URL=nats://broker:${MF_NATS_PORT}
|
||||||
|
|
||||||
|
## RabbitMQ
|
||||||
|
MF_RABBITMQ_PORT=5672
|
||||||
|
MF_RABBITMQ_HTTP_PORT=15672
|
||||||
|
MF_RABBITMQ_USER=mainflux
|
||||||
|
MF_RABBITMQ_PASS=mainflux
|
||||||
|
MF_RABBITMQ_COOKIE=mainflux
|
||||||
|
MF_RABBITMQ_VHOST=/
|
||||||
|
MF_RABBITMQ_URL=amqp://${MF_RABBITMQ_USER}:${MF_RABBITMQ_PASS}@broker:${MF_RABBITMQ_PORT}${MF_MF_RABBITMQ_VHOST}
|
||||||
|
|
||||||
## Redis
|
## Redis
|
||||||
MF_REDIS_TCP_PORT=6379
|
MF_REDIS_TCP_PORT=6379
|
||||||
|
@ -35,7 +35,7 @@ services:
|
|||||||
restart: on-failure
|
restart: on-failure
|
||||||
environment:
|
environment:
|
||||||
MF_CASSANDRA_WRITER_LOG_LEVEL: ${MF_CASSANDRA_WRITER_LOG_LEVEL}
|
MF_CASSANDRA_WRITER_LOG_LEVEL: ${MF_CASSANDRA_WRITER_LOG_LEVEL}
|
||||||
MF_NATS_URL: ${MF_NATS_URL}
|
MF_BROKER_URL: ${MF_BROKER_URL}
|
||||||
MF_CASSANDRA_WRITER_PORT: ${MF_CASSANDRA_WRITER_PORT}
|
MF_CASSANDRA_WRITER_PORT: ${MF_CASSANDRA_WRITER_PORT}
|
||||||
MF_CASSANDRA_WRITER_DB_PORT: ${MF_CASSANDRA_WRITER_DB_PORT}
|
MF_CASSANDRA_WRITER_DB_PORT: ${MF_CASSANDRA_WRITER_DB_PORT}
|
||||||
MF_CASSANDRA_WRITER_DB_CLUSTER: ${MF_CASSANDRA_WRITER_DB_CLUSTER}
|
MF_CASSANDRA_WRITER_DB_CLUSTER: ${MF_CASSANDRA_WRITER_DB_CLUSTER}
|
||||||
|
@ -41,7 +41,7 @@ services:
|
|||||||
restart: on-failure
|
restart: on-failure
|
||||||
environment:
|
environment:
|
||||||
MF_INFLUX_WRITER_LOG_LEVEL: debug
|
MF_INFLUX_WRITER_LOG_LEVEL: debug
|
||||||
MF_NATS_URL: ${MF_NATS_URL}
|
MF_BROKER_URL: ${MF_BROKER_URL}
|
||||||
MF_INFLUX_WRITER_PORT: ${MF_INFLUX_WRITER_PORT}
|
MF_INFLUX_WRITER_PORT: ${MF_INFLUX_WRITER_PORT}
|
||||||
MF_INFLUX_WRITER_BATCH_SIZE: ${MF_INFLUX_WRITER_BATCH_SIZE}
|
MF_INFLUX_WRITER_BATCH_SIZE: ${MF_INFLUX_WRITER_BATCH_SIZE}
|
||||||
MF_INFLUX_WRITER_BATCH_TIMEOUT: ${MF_INFLUX_WRITER_BATCH_TIMEOUT}
|
MF_INFLUX_WRITER_BATCH_TIMEOUT: ${MF_INFLUX_WRITER_BATCH_TIMEOUT}
|
||||||
|
@ -34,7 +34,7 @@ services:
|
|||||||
MF_LORA_ADAPTER_MESSAGES_PASS: ${MF_LORA_ADAPTER_MESSAGES_PASS}
|
MF_LORA_ADAPTER_MESSAGES_PASS: ${MF_LORA_ADAPTER_MESSAGES_PASS}
|
||||||
MF_LORA_ADAPTER_MESSAGES_TIMEOUT: ${MF_LORA_ADAPTER_MESSAGES_TIMEOUT}
|
MF_LORA_ADAPTER_MESSAGES_TIMEOUT: ${MF_LORA_ADAPTER_MESSAGES_TIMEOUT}
|
||||||
MF_LORA_ADAPTER_HTTP_PORT: ${MF_LORA_ADAPTER_HTTP_PORT}
|
MF_LORA_ADAPTER_HTTP_PORT: ${MF_LORA_ADAPTER_HTTP_PORT}
|
||||||
MF_NATS_URL: ${MF_NATS_URL}
|
MF_BROKER_URL: ${MF_BROKER_URL}
|
||||||
ports:
|
ports:
|
||||||
- ${MF_LORA_ADAPTER_HTTP_PORT}:${MF_LORA_ADAPTER_HTTP_PORT}
|
- ${MF_LORA_ADAPTER_HTTP_PORT}:${MF_LORA_ADAPTER_HTTP_PORT}
|
||||||
networks:
|
networks:
|
||||||
|
@ -41,7 +41,7 @@ services:
|
|||||||
restart: on-failure
|
restart: on-failure
|
||||||
environment:
|
environment:
|
||||||
MF_MONGO_WRITER_LOG_LEVEL: ${MF_MONGO_WRITER_LOG_LEVEL}
|
MF_MONGO_WRITER_LOG_LEVEL: ${MF_MONGO_WRITER_LOG_LEVEL}
|
||||||
MF_NATS_URL: ${MF_NATS_URL}
|
MF_BROKER_URL: ${MF_BROKER_URL}
|
||||||
MF_MONGO_WRITER_PORT: ${MF_MONGO_WRITER_PORT}
|
MF_MONGO_WRITER_PORT: ${MF_MONGO_WRITER_PORT}
|
||||||
MF_MONGO_WRITER_DB: ${MF_MONGO_WRITER_DB}
|
MF_MONGO_WRITER_DB: ${MF_MONGO_WRITER_DB}
|
||||||
MF_MONGO_WRITER_DB_HOST: mongodb
|
MF_MONGO_WRITER_DB_HOST: mongodb
|
||||||
|
@ -33,7 +33,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
MF_OPCUA_ADAPTER_HTTP_PORT: ${MF_OPCUA_ADAPTER_HTTP_PORT}
|
MF_OPCUA_ADAPTER_HTTP_PORT: ${MF_OPCUA_ADAPTER_HTTP_PORT}
|
||||||
MF_OPCUA_ADAPTER_LOG_LEVEL: ${MF_OPCUA_ADAPTER_LOG_LEVEL}
|
MF_OPCUA_ADAPTER_LOG_LEVEL: ${MF_OPCUA_ADAPTER_LOG_LEVEL}
|
||||||
MF_NATS_URL: ${MF_NATS_URL}
|
MF_BROKER_URL: ${MF_BROKER_URL}
|
||||||
MF_OPCUA_ADAPTER_POLICY: ${MF_OPCUA_ADAPTER_POLICY}
|
MF_OPCUA_ADAPTER_POLICY: ${MF_OPCUA_ADAPTER_POLICY}
|
||||||
MF_OPCUA_ADAPTER_MODE: ${MF_OPCUA_ADAPTER_MODE}
|
MF_OPCUA_ADAPTER_MODE: ${MF_OPCUA_ADAPTER_MODE}
|
||||||
MF_OPCUA_ADAPTER_CERT_FILE: ${MF_OPCUA_ADAPTER_CERT_FILE}
|
MF_OPCUA_ADAPTER_CERT_FILE: ${MF_OPCUA_ADAPTER_CERT_FILE}
|
||||||
|
@ -38,7 +38,7 @@ services:
|
|||||||
- postgres
|
- postgres
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
environment:
|
environment:
|
||||||
MF_NATS_URL: ${MF_NATS_URL}
|
MF_BROKER_URL: ${MF_BROKER_URL}
|
||||||
MF_POSTGRES_WRITER_LOG_LEVEL: ${MF_POSTGRES_WRITER_LOG_LEVEL}
|
MF_POSTGRES_WRITER_LOG_LEVEL: ${MF_POSTGRES_WRITER_LOG_LEVEL}
|
||||||
MF_POSTGRES_WRITER_PORT: ${MF_POSTGRES_WRITER_PORT}
|
MF_POSTGRES_WRITER_PORT: ${MF_POSTGRES_WRITER_PORT}
|
||||||
MF_POSTGRES_WRITER_DB_HOST: postgres
|
MF_POSTGRES_WRITER_DB_HOST: postgres
|
||||||
|
@ -36,7 +36,7 @@ services:
|
|||||||
- smpp-notifier-db
|
- smpp-notifier-db
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
environment:
|
environment:
|
||||||
MF_NATS_URL: ${MF_NATS_URL}
|
MF_BROKER_URL: ${MF_BROKER_URL}
|
||||||
MF_JAEGER_URL: ${MF_JAEGER_URL}
|
MF_JAEGER_URL: ${MF_JAEGER_URL}
|
||||||
MF_AUTH_GRPC_URL: ${MF_AUTH_GRPC_URL}
|
MF_AUTH_GRPC_URL: ${MF_AUTH_GRPC_URL}
|
||||||
MF_AUTH_GRPC_TIMEOUT: ${MF_AUTH_GRPC_TIMEOUT}
|
MF_AUTH_GRPC_TIMEOUT: ${MF_AUTH_GRPC_TIMEOUT}
|
||||||
|
@ -43,7 +43,7 @@ services:
|
|||||||
MF_SMTP_NOTIFIER_DB_PASS: ${MF_SMTP_NOTIFIER_DB_PASS}
|
MF_SMTP_NOTIFIER_DB_PASS: ${MF_SMTP_NOTIFIER_DB_PASS}
|
||||||
MF_SMTP_NOTIFIER_DB: ${MF_SMTP_NOTIFIER_DB}
|
MF_SMTP_NOTIFIER_DB: ${MF_SMTP_NOTIFIER_DB}
|
||||||
MF_SMTP_NOTIFIER_PORT: ${MF_SMTP_NOTIFIER_PORT}
|
MF_SMTP_NOTIFIER_PORT: ${MF_SMTP_NOTIFIER_PORT}
|
||||||
MF_NATS_URL: ${MF_NATS_URL}
|
MF_BROKER_URL: ${MF_BROKER_URL}
|
||||||
MF_JAEGER_URL: ${MF_JAEGER_URL}
|
MF_JAEGER_URL: ${MF_JAEGER_URL}
|
||||||
MF_AUTH_GRPC_URL: ${MF_AUTH_GRPC_URL}
|
MF_AUTH_GRPC_URL: ${MF_AUTH_GRPC_URL}
|
||||||
MF_AUTH_GRPC_TIMEOUT: ${MF_AUTH_GRPC_TIMEOUT}
|
MF_AUTH_GRPC_TIMEOUT: ${MF_AUTH_GRPC_TIMEOUT}
|
||||||
|
@ -38,7 +38,7 @@ services:
|
|||||||
- timescale
|
- timescale
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
environment:
|
environment:
|
||||||
MF_NATS_URL: ${MF_NATS_URL}
|
MF_BROKER_URL: ${MF_BROKER_URL}
|
||||||
MF_TIMESCALE_WRITER_LOG_LEVEL: ${MF_TIMESCALE_WRITER_LOG_LEVEL}
|
MF_TIMESCALE_WRITER_LOG_LEVEL: ${MF_TIMESCALE_WRITER_LOG_LEVEL}
|
||||||
MF_TIMESCALE_WRITER_PORT: ${MF_TIMESCALE_WRITER_PORT}
|
MF_TIMESCALE_WRITER_PORT: ${MF_TIMESCALE_WRITER_PORT}
|
||||||
MF_TIMESCALE_WRITER_DB_HOST: timescale
|
MF_TIMESCALE_WRITER_DB_HOST: timescale
|
||||||
|
@ -43,7 +43,7 @@ services:
|
|||||||
MF_TWINS_DB_HOST: ${MF_TWINS_DB_HOST}
|
MF_TWINS_DB_HOST: ${MF_TWINS_DB_HOST}
|
||||||
MF_TWINS_DB_PORT: ${MF_TWINS_DB_PORT}
|
MF_TWINS_DB_PORT: ${MF_TWINS_DB_PORT}
|
||||||
MF_TWINS_CHANNEL_ID: ${MF_TWINS_CHANNEL_ID}
|
MF_TWINS_CHANNEL_ID: ${MF_TWINS_CHANNEL_ID}
|
||||||
MF_NATS_URL: ${MF_NATS_URL}
|
MF_BROKER_URL: ${MF_BROKER_URL}
|
||||||
MF_AUTH_GRPC_URL: ${MF_AUTH_GRPC_URL}
|
MF_AUTH_GRPC_URL: ${MF_AUTH_GRPC_URL}
|
||||||
MF_AUTH_GRPC_TIMEOUT: ${MF_AUTH_GRPC_TIMEOUT}
|
MF_AUTH_GRPC_TIMEOUT: ${MF_AUTH_GRPC_TIMEOUT}
|
||||||
MF_TWINS_CACHE_URL: ${MF_TWINS_CACHE_URL}
|
MF_TWINS_CACHE_URL: ${MF_TWINS_CACHE_URL}
|
||||||
|
8
docker/brokers/nats.yml
Normal file
8
docker/brokers/nats.yml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
services:
|
||||||
|
broker:
|
||||||
|
image: nats:2.2.4-alpine
|
||||||
|
command: "-c /etc/nats/nats.conf"
|
||||||
|
volumes:
|
||||||
|
- ./../nats/:/etc/nats
|
||||||
|
ports:
|
||||||
|
- ${MF_NATS_PORT}:${MF_NATS_PORT}
|
11
docker/brokers/rabbitmq.yml
Normal file
11
docker/brokers/rabbitmq.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
services:
|
||||||
|
broker:
|
||||||
|
image: rabbitmq:3.9.20-management-alpine
|
||||||
|
environment:
|
||||||
|
RABBITMQ_ERLANG_COOKIE: ${MF_RABBITMQ_COOKIE}
|
||||||
|
RABBITMQ_DEFAULT_USER: ${MF_RABBITMQ_USER}
|
||||||
|
RABBITMQ_DEFAULT_PASS: ${MF_RABBITMQ_PASS}
|
||||||
|
RABBITMQ_DEFAULT_VHOST: ${MF_RABBITMQ_VHOST}
|
||||||
|
ports:
|
||||||
|
- ${MF_RABBITMQ_PORT}:${MF_RABBITMQ_PORT}
|
||||||
|
- ${MF_RABBITMQ_HTTP_PORT}:${MF_RABBITMQ_HTTP_PORT}
|
@ -95,13 +95,12 @@ services:
|
|||||||
- mqtt-adapter
|
- mqtt-adapter
|
||||||
- http-adapter
|
- http-adapter
|
||||||
|
|
||||||
nats:
|
broker:
|
||||||
image: nats:2.2.4-alpine
|
extends:
|
||||||
container_name: mainflux-nats
|
file: brokers/nats.yml
|
||||||
command: "-c /etc/nats/nats.conf"
|
service: broker
|
||||||
|
container_name: mainflux-broker
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
volumes:
|
|
||||||
- ./nats/:/etc/nats
|
|
||||||
networks:
|
networks:
|
||||||
- mainflux-base-net
|
- mainflux-base-net
|
||||||
ports:
|
ports:
|
||||||
@ -280,14 +279,14 @@ services:
|
|||||||
depends_on:
|
depends_on:
|
||||||
- vernemq
|
- vernemq
|
||||||
- things
|
- things
|
||||||
- nats
|
- broker
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
environment:
|
environment:
|
||||||
MF_MQTT_ADAPTER_LOG_LEVEL: ${MF_MQTT_ADAPTER_LOG_LEVEL}
|
MF_MQTT_ADAPTER_LOG_LEVEL: ${MF_MQTT_ADAPTER_LOG_LEVEL}
|
||||||
MF_MQTT_ADAPTER_MQTT_PORT: ${MF_MQTT_ADAPTER_MQTT_PORT}
|
MF_MQTT_ADAPTER_MQTT_PORT: ${MF_MQTT_ADAPTER_MQTT_PORT}
|
||||||
MF_MQTT_ADAPTER_WS_PORT: ${MF_MQTT_ADAPTER_WS_PORT}
|
MF_MQTT_ADAPTER_WS_PORT: ${MF_MQTT_ADAPTER_WS_PORT}
|
||||||
MF_MQTT_ADAPTER_ES_URL: es-redis:${MF_REDIS_TCP_PORT}
|
MF_MQTT_ADAPTER_ES_URL: es-redis:${MF_REDIS_TCP_PORT}
|
||||||
MF_NATS_URL: ${MF_NATS_URL}
|
MF_BROKER_URL: ${MF_NATS_URL}
|
||||||
MF_MQTT_ADAPTER_MQTT_TARGET_HOST: vernemq
|
MF_MQTT_ADAPTER_MQTT_TARGET_HOST: vernemq
|
||||||
MF_MQTT_ADAPTER_MQTT_TARGET_PORT: ${MF_MQTT_BROKER_PORT}
|
MF_MQTT_ADAPTER_MQTT_TARGET_PORT: ${MF_MQTT_BROKER_PORT}
|
||||||
MF_MQTT_ADAPTER_MQTT_TARGET_HEALTH_CHECK: http://vernemq:8888/health
|
MF_MQTT_ADAPTER_MQTT_TARGET_HEALTH_CHECK: http://vernemq:8888/health
|
||||||
@ -305,12 +304,12 @@ services:
|
|||||||
container_name: mainflux-http
|
container_name: mainflux-http
|
||||||
depends_on:
|
depends_on:
|
||||||
- things
|
- things
|
||||||
- nats
|
- broker
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
environment:
|
environment:
|
||||||
MF_HTTP_ADAPTER_LOG_LEVEL: debug
|
MF_HTTP_ADAPTER_LOG_LEVEL: debug
|
||||||
MF_HTTP_ADAPTER_PORT: ${MF_HTTP_ADAPTER_PORT}
|
MF_HTTP_ADAPTER_PORT: ${MF_HTTP_ADAPTER_PORT}
|
||||||
MF_NATS_URL: ${MF_NATS_URL}
|
MF_BROKER_URL: ${MF_NATS_URL}
|
||||||
MF_JAEGER_URL: ${MF_JAEGER_URL}
|
MF_JAEGER_URL: ${MF_JAEGER_URL}
|
||||||
MF_THINGS_AUTH_GRPC_URL: ${MF_THINGS_AUTH_GRPC_URL}
|
MF_THINGS_AUTH_GRPC_URL: ${MF_THINGS_AUTH_GRPC_URL}
|
||||||
MF_THINGS_AUTH_GRPC_TIMEOUT: ${MF_THINGS_AUTH_GRPC_TIMEOUT}
|
MF_THINGS_AUTH_GRPC_TIMEOUT: ${MF_THINGS_AUTH_GRPC_TIMEOUT}
|
||||||
@ -333,12 +332,12 @@ services:
|
|||||||
container_name: mainflux-coap
|
container_name: mainflux-coap
|
||||||
depends_on:
|
depends_on:
|
||||||
- things
|
- things
|
||||||
- nats
|
- broker
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
environment:
|
environment:
|
||||||
MF_COAP_ADAPTER_LOG_LEVEL: ${MF_COAP_ADAPTER_LOG_LEVEL}
|
MF_COAP_ADAPTER_LOG_LEVEL: ${MF_COAP_ADAPTER_LOG_LEVEL}
|
||||||
MF_COAP_ADAPTER_PORT: ${MF_COAP_ADAPTER_PORT}
|
MF_COAP_ADAPTER_PORT: ${MF_COAP_ADAPTER_PORT}
|
||||||
MF_NATS_URL: ${MF_NATS_URL}
|
MF_BROKER_URL: ${MF_NATS_URL}
|
||||||
MF_JAEGER_URL: ${MF_JAEGER_URL}
|
MF_JAEGER_URL: ${MF_JAEGER_URL}
|
||||||
MF_THINGS_AUTH_GRPC_URL: ${MF_THINGS_AUTH_GRPC_URL}
|
MF_THINGS_AUTH_GRPC_URL: ${MF_THINGS_AUTH_GRPC_URL}
|
||||||
MF_THINGS_AUTH_GRPC_TIMEOUT: ${MF_THINGS_AUTH_GRPC_TIMEOUT}
|
MF_THINGS_AUTH_GRPC_TIMEOUT: ${MF_THINGS_AUTH_GRPC_TIMEOUT}
|
||||||
|
@ -8,16 +8,16 @@ The service is configured using the environment variables presented in the
|
|||||||
following table. Note that any unset variables will be replaced with their
|
following table. Note that any unset variables will be replaced with their
|
||||||
default values.
|
default values.
|
||||||
|
|
||||||
| Variable | Description | Default |
|
| Variable | Description | Default |
|
||||||
| --------------------------- | --------------------------------------------------- | --------------------- |
|
| --------------------------- | ------------------------------------------------------------- | --------------------- |
|
||||||
| MF_HTTP_ADAPTER_LOG_LEVEL | Log level for the HTTP Adapter | error |
|
| MF_HTTP_ADAPTER_LOG_LEVEL | Log level for the HTTP Adapter | error |
|
||||||
| MF_HTTP_ADAPTER_PORT | Service HTTP port | 8180 |
|
| MF_HTTP_ADAPTER_PORT | Service HTTP port | 8180 |
|
||||||
| MF_NATS_URL | NATS instance URL | nats://localhost:4222 |
|
| MF_BROKER_URL | Message broker instance URL | nats://localhost:4222 |
|
||||||
| MF_HTTP_ADAPTER_CLIENT_TLS | Flag that indicates if TLS should be turned on | false |
|
| MF_HTTP_ADAPTER_CLIENT_TLS | Flag that indicates if TLS should be turned on | false |
|
||||||
| MF_HTTP_ADAPTER_CA_CERTS | Path to trusted CAs in PEM format | |
|
| MF_HTTP_ADAPTER_CA_CERTS | Path to trusted CAs in PEM format | |
|
||||||
| MF_JAEGER_URL | Jaeger server URL | localhost:6831 |
|
| MF_JAEGER_URL | Jaeger server URL | localhost:6831 |
|
||||||
| MF_THINGS_AUTH_GRPC_URL | Things service Auth gRPC URL | localhost:8181 |
|
| MF_THINGS_AUTH_GRPC_URL | Things service Auth gRPC URL | localhost:8181 |
|
||||||
| MF_THINGS_AUTH_GRPC_TIMEOUT | Things service Auth gRPC request timeout in seconds | 1s |
|
| MF_THINGS_AUTH_GRPC_TIMEOUT | Things service Auth gRPC request timeout in seconds | 1s |
|
||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ make http
|
|||||||
make install
|
make install
|
||||||
|
|
||||||
# set the environment variables and run the service
|
# set the environment variables and run the service
|
||||||
MF_NATS_URL=[NATS instance URL] \
|
MF_BROKER_URL=[Message broker instance URL] \
|
||||||
MF_HTTP_ADAPTER_LOG_LEVEL=[HTTP Adapter Log Level] \
|
MF_HTTP_ADAPTER_LOG_LEVEL=[HTTP Adapter Log Level] \
|
||||||
MF_HTTP_ADAPTER_PORT=[Service HTTP port] \
|
MF_HTTP_ADAPTER_PORT=[Service HTTP port] \
|
||||||
MF_HTTP_ADAPTER_CA_CERTS=[Path to trusted CAs in PEM format] \
|
MF_HTTP_ADAPTER_CA_CERTS=[Path to trusted CAs in PEM format] \
|
||||||
|
@ -17,3 +17,7 @@ func NewPublisher() messaging.Publisher {
|
|||||||
func (pub mockPublisher) Publish(topic string, msg messaging.Message) error {
|
func (pub mockPublisher) Publish(topic string, msg messaging.Message) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (pub mockPublisher) Close() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -15,7 +15,7 @@ default values.
|
|||||||
|----------------------------------|---------------------------------------|---------------------------------|
|
|----------------------------------|---------------------------------------|---------------------------------|
|
||||||
| MF_LORA_ADAPTER_HTTP_PORT | Service HTTP port | 8180 |
|
| MF_LORA_ADAPTER_HTTP_PORT | Service HTTP port | 8180 |
|
||||||
| MF_LORA_ADAPTER_LOG_LEVEL | Service Log level | error |
|
| MF_LORA_ADAPTER_LOG_LEVEL | Service Log level | error |
|
||||||
| MF_NATS_URL | NATS instance URL | nats://localhost:4222 |
|
| MF_BROKER_URL | Message broker instance URL | nats://localhost:4222 |
|
||||||
| MF_LORA_ADAPTER_MESSAGES_URL | LoRa adapter MQTT broker URL | tcp://localhost:1883 |
|
| MF_LORA_ADAPTER_MESSAGES_URL | LoRa adapter MQTT broker URL | tcp://localhost:1883 |
|
||||||
| MF_LORA_ADAPTER_MESSAGES_TOPIC | LoRa adapter MQTT subscriber Topic | application/+/device/+/event/up |
|
| MF_LORA_ADAPTER_MESSAGES_TOPIC | LoRa adapter MQTT subscriber Topic | application/+/device/+/event/up |
|
||||||
| MF_LORA_ADAPTER_MESSAGES_USER | LoRa adapter MQTT subscriber Username | |
|
| MF_LORA_ADAPTER_MESSAGES_USER | LoRa adapter MQTT subscriber Username | |
|
||||||
@ -50,7 +50,7 @@ make install
|
|||||||
|
|
||||||
# set the environment variables and run the service
|
# set the environment variables and run the service
|
||||||
MF_LORA_ADAPTER_LOG_LEVEL=[Lora Adapter Log Level] \
|
MF_LORA_ADAPTER_LOG_LEVEL=[Lora Adapter Log Level] \
|
||||||
MF_NATS_URL=[NATS instance URL] \
|
MF_BROKER_URL=[Message broker instance URL] \
|
||||||
MF_LORA_ADAPTER_MESSAGES_URL=[LoRa adapter MQTT broker URL] \
|
MF_LORA_ADAPTER_MESSAGES_URL=[LoRa adapter MQTT broker URL] \
|
||||||
MF_LORA_ADAPTER_MESSAGES_TOPIC=[LoRa adapter MQTT subscriber Topic] \
|
MF_LORA_ADAPTER_MESSAGES_TOPIC=[LoRa adapter MQTT subscriber Topic] \
|
||||||
MF_LORA_ADAPTER_MESSAGES_USER=[LoRa adapter MQTT subscriber Username] \
|
MF_LORA_ADAPTER_MESSAGES_USER=[LoRa adapter MQTT subscriber Username] \
|
||||||
|
@ -54,7 +54,7 @@ type Service interface {
|
|||||||
// DisconnectThing removes thingID:channelID route-map
|
// DisconnectThing removes thingID:channelID route-map
|
||||||
DisconnectThing(ctx context.Context, chanID, thingID string) error
|
DisconnectThing(ctx context.Context, chanID, thingID string) error
|
||||||
|
|
||||||
// Publish forwards messages from the LoRa MQTT broker to Mainflux NATS broker
|
// Publish forwards messages from the LoRa MQTT broker to Mainflux Message Broker
|
||||||
Publish(ctx context.Context, msg Message) error
|
Publish(ctx context.Context, msg Message) error
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ func New(publisher messaging.Publisher, thingsRM, channelsRM, connectRM RouteMap
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Publish forwards messages from Lora MQTT broker to Mainflux NATS broker
|
// Publish forwards messages from Lora MQTT broker to Mainflux Message broker
|
||||||
func (as *adapterService) Publish(ctx context.Context, m Message) error {
|
func (as *adapterService) Publish(ctx context.Context, m Message) error {
|
||||||
// Get route map of lora application
|
// Get route map of lora application
|
||||||
thingID, err := as.thingsRM.Get(ctx, m.DevEUI)
|
thingID, err := as.thingsRM.Get(ctx, m.DevEUI)
|
||||||
@ -113,7 +113,7 @@ func (as *adapterService) Publish(ctx context.Context, m Message) error {
|
|||||||
payload = []byte(jo)
|
payload = []byte(jo)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Publish on Mainflux NATS broker
|
// Publish on Mainflux Message broker
|
||||||
msg := messaging.Message{
|
msg := messaging.Message{
|
||||||
Publisher: thingID,
|
Publisher: thingID,
|
||||||
Protocol: protocol,
|
Protocol: protocol,
|
||||||
|
@ -17,3 +17,7 @@ func NewPublisher() messaging.Publisher {
|
|||||||
func (pub mockPublisher) Publish(topic string, msg messaging.Message) error {
|
func (pub mockPublisher) Publish(topic string, msg messaging.Message) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (pub mockPublisher) Close() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -10,31 +10,31 @@ The service is configured using the environment variables presented in the
|
|||||||
following table. Note that any unset variables will be replaced with their
|
following table. Note that any unset variables will be replaced with their
|
||||||
default values.
|
default values.
|
||||||
|
|
||||||
| Variable | Description | Default |
|
| Variable | Description | Default |
|
||||||
|------------------------------------------|--------------------------------------------------------|-----------------------|
|
|------------------------------------------|------------------------------------------------------------------|-----------------------|
|
||||||
| MF_MQTT_ADAPTER_LOG_LEVEL | mProxy Log level | error |
|
| MF_MQTT_ADAPTER_LOG_LEVEL | mProxy Log level | error |
|
||||||
| MF_MQTT_ADAPTER_MQTT_PORT | mProxy port | 1883 |
|
| MF_MQTT_ADAPTER_MQTT_PORT | mProxy port | 1883 |
|
||||||
| MF_MQTT_ADAPTER_MQTT_TARGET_HOST | MQTT broker host | 0.0.0.0 |
|
| MF_MQTT_ADAPTER_MQTT_TARGET_HOST | MQTT broker host | 0.0.0.0 |
|
||||||
| MF_MQTT_ADAPTER_MQTT_TARGET_PORT | MQTT broker port | 1883 |
|
| MF_MQTT_ADAPTER_MQTT_TARGET_PORT | MQTT broker port | 1883 |
|
||||||
| MF_MQTT_ADAPTER_MQTT_TARGET_HEALTH_CHECK | URL of broker health check | "" |
|
| MF_MQTT_ADAPTER_MQTT_TARGET_HEALTH_CHECK | URL of broker health check | "" |
|
||||||
| MF_MQTT_ADAPTER_WS_PORT | mProxy MQTT over WS port | 8080 |
|
| MF_MQTT_ADAPTER_WS_PORT | mProxy MQTT over WS port | 8080 |
|
||||||
| MF_MQTT_ADAPTER_WS_TARGET_HOST | MQTT broker host for MQTT over WS | localhost |
|
| MF_MQTT_ADAPTER_WS_TARGET_HOST | MQTT broker host for MQTT over WS | localhost |
|
||||||
| MF_MQTT_ADAPTER_WS_TARGET_PORT | MQTT broker port for MQTT over WS | 8080 |
|
| MF_MQTT_ADAPTER_WS_TARGET_PORT | MQTT broker port for MQTT over WS | 8080 |
|
||||||
| MF_MQTT_ADAPTER_WS_TARGET_PATH | MQTT broker MQTT over WS path | /mqtt |
|
| MF_MQTT_ADAPTER_WS_TARGET_PATH | MQTT broker MQTT over WS path | /mqtt |
|
||||||
| MF_MQTT_ADAPTER_FORWARDER_TIMEOUT | MQTT forwarder for multiprotocol communication timeout | 30s |
|
| MF_MQTT_ADAPTER_FORWARDER_TIMEOUT | MQTT forwarder for multiprotocol communication timeout | 30s |
|
||||||
| MF_NATS_URL | NATS broker URL | nats://127.0.0.1:4222 |
|
| MF_BROKER_URL | Message broker broker URL | nats://127.0.0.1:4222 |
|
||||||
| MF_THINGS_AUTH_GRPC_URL | Things gRPC endpoint URL | localhost:8181 |
|
| MF_THINGS_AUTH_GRPC_URL | Things gRPC endpoint URL | localhost:8181 |
|
||||||
| MF_THINGS_AUTH_GRPC_TIMEOUT | Timeout in seconds for Things service gRPC calls | 1s |
|
| MF_THINGS_AUTH_GRPC_TIMEOUT | Timeout in seconds for Things service gRPC calls | 1s |
|
||||||
| MF_JAEGER_URL | URL of Jaeger tracing service | "" |
|
| MF_JAEGER_URL | URL of Jaeger tracing service | "" |
|
||||||
| MF_MQTT_ADAPTER_CLIENT_TLS | gRPC client TLS | false |
|
| MF_MQTT_ADAPTER_CLIENT_TLS | gRPC client TLS | false |
|
||||||
| MF_MQTT_ADAPTER_CA_CERTS | CA certs for gRPC client TLS | "" |
|
| MF_MQTT_ADAPTER_CA_CERTS | CA certs for gRPC client TLS | "" |
|
||||||
| MF_MQTT_ADAPTER_INSTANCE | Instance name for event sourcing | "" |
|
| MF_MQTT_ADAPTER_INSTANCE | Instance name for event sourcing | "" |
|
||||||
| MF_MQTT_ADAPTER_ES_URL | Event sourcing URL | localhost:6379 |
|
| MF_MQTT_ADAPTER_ES_URL | Event sourcing URL | localhost:6379 |
|
||||||
| MF_MQTT_ADAPTER_ES_PASS | Event sourcing password | "" |
|
| MF_MQTT_ADAPTER_ES_PASS | Event sourcing password | "" |
|
||||||
| MF_MQTT_ADAPTER_ES_DB | Event sourcing database | "0" |
|
| MF_MQTT_ADAPTER_ES_DB | Event sourcing database | "0" |
|
||||||
| MF_AUTH_CACHE_URL | Auth cache URL | localhost:6379 |
|
| MF_AUTH_CACHE_URL | Auth cache URL | localhost:6379 |
|
||||||
| MF_AUTH_CACHE_PASS | Auth cache password | "" |
|
| MF_AUTH_CACHE_PASS | Auth cache password | "" |
|
||||||
| MF_AUTH_CACHE_DB | Auth cache database | "0" |
|
| MF_AUTH_CACHE_DB | Auth cache database | "0" |
|
||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ MF_MQTT_ADAPTER_WS_TARGET_HOST=[MQTT broker for MQTT over WS host] \
|
|||||||
MF_MQTT_ADAPTER_WS_TARGET_PORT=[MQTT broker for MQTT over WS port]] \
|
MF_MQTT_ADAPTER_WS_TARGET_PORT=[MQTT broker for MQTT over WS port]] \
|
||||||
MF_MQTT_ADAPTER_WS_TARGET_PATH=[MQTT adapter WS path] \
|
MF_MQTT_ADAPTER_WS_TARGET_PATH=[MQTT adapter WS path] \
|
||||||
MF_MQTT_ADAPTER_FORWARDER_TIMEOUT=[MQTT forwarder for multiprotocol support timeout] \
|
MF_MQTT_ADAPTER_FORWARDER_TIMEOUT=[MQTT forwarder for multiprotocol support timeout] \
|
||||||
MF_NATS_URL=[NATS instance URL] \
|
MF_BROKER_URL=[Message broker instance URL] \
|
||||||
MF_THINGS_AUTH_GRPC_URL=[Things service Auth gRPC URL] \
|
MF_THINGS_AUTH_GRPC_URL=[Things service Auth gRPC URL] \
|
||||||
MF_THINGS_AUTH_GRPC_TIMEOUT=[Things service Auth gRPC request timeout in seconds] \
|
MF_THINGS_AUTH_GRPC_TIMEOUT=[Things service Auth gRPC request timeout in seconds] \
|
||||||
MF_JAEGER_URL=[Jaeger service URL] \
|
MF_JAEGER_URL=[Jaeger service URL] \
|
||||||
|
@ -11,23 +11,23 @@ The service is configured using the environment variables presented in the
|
|||||||
following table. Note that any unset variables will be replaced with their
|
following table. Note that any unset variables will be replaced with their
|
||||||
default values.
|
default values.
|
||||||
|
|
||||||
| Variable | Description | Default |
|
| Variable | Description | Default |
|
||||||
|----------------------------------|----------------------------------------|----------------------------|
|
|----------------------------------|--------------------------------------------------|----------------------------|
|
||||||
| MF_OPCUA_ADAPTER_HTTP_PORT | Service HTTP port | 8180 |
|
| MF_OPCUA_ADAPTER_HTTP_PORT | Service HTTP port | 8180 |
|
||||||
| MF_OPCUA_ADAPTER_LOG_LEVEL | Service Log level | error |
|
| MF_OPCUA_ADAPTER_LOG_LEVEL | Service Log level | error |
|
||||||
| MF_NATS_URL | NATS instance URL | nats://localhost:4222 |
|
| MF_BROKER_URL | Message broker instance URL | nats://localhost:4222 |
|
||||||
| MF_OPCUA_ADAPTER_INTERVAL_MS | OPC-UA Server Interval in milliseconds | 1000 |
|
| MF_OPCUA_ADAPTER_INTERVAL_MS | OPC-UA Server Interval in milliseconds | 1000 |
|
||||||
| MF_OPCUA_ADAPTER_POLICY | OPC-UA Server Policy | |
|
| MF_OPCUA_ADAPTER_POLICY | OPC-UA Server Policy | |
|
||||||
| MF_OPCUA_ADAPTER_MODE | OPC-UA Server Mode | |
|
| MF_OPCUA_ADAPTER_MODE | OPC-UA Server Mode | |
|
||||||
| MF_OPCUA_ADAPTER_CERT_FILE | OPC-UA Server Certificate file | |
|
| MF_OPCUA_ADAPTER_CERT_FILE | OPC-UA Server Certificate file | |
|
||||||
| MF_OPCUA_ADAPTER_KEY_FILE | OPC-UA Server Key file | |
|
| MF_OPCUA_ADAPTER_KEY_FILE | OPC-UA Server Key file | |
|
||||||
| MF_OPCUA_ADAPTER_ROUTE_MAP_URL | Route-map database URL | localhost:6379 |
|
| MF_OPCUA_ADAPTER_ROUTE_MAP_URL | Route-map database URL | localhost:6379 |
|
||||||
| MF_OPCUA_ADAPTER_ROUTE_MAP_PASS | Route-map database password | |
|
| MF_OPCUA_ADAPTER_ROUTE_MAP_PASS | Route-map database password | |
|
||||||
| MF_OPCUA_ADAPTER_ROUTE_MAP_DB | Route-map instance name | 0 |
|
| MF_OPCUA_ADAPTER_ROUTE_MAP_DB | Route-map instance name | 0 |
|
||||||
| MF_THINGS_ES_URL | Things service event source URL | localhost:6379 |
|
| MF_THINGS_ES_URL | Things service event source URL | localhost:6379 |
|
||||||
| MF_THINGS_ES_PASS | Things service event source password | |
|
| MF_THINGS_ES_PASS | Things service event source password | |
|
||||||
| MF_THINGS_ES_DB | Things service event source DB | 0 |
|
| MF_THINGS_ES_DB | Things service event source DB | 0 |
|
||||||
| MF_OPCUA_ADAPTER_EVENT_CONSUMER | Service event consumer name | opcua |
|
| MF_OPCUA_ADAPTER_EVENT_CONSUMER | Service event consumer name | opcua |
|
||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ make install
|
|||||||
# set the environment variables and run the service
|
# set the environment variables and run the service
|
||||||
MF_OPCUA_ADAPTER_HTTP_PORT=[Service HTTP port] \
|
MF_OPCUA_ADAPTER_HTTP_PORT=[Service HTTP port] \
|
||||||
MF_OPCUA_ADAPTER_LOG_LEVEL=[OPC-UA Adapter Log Level] \
|
MF_OPCUA_ADAPTER_LOG_LEVEL=[OPC-UA Adapter Log Level] \
|
||||||
MF_NATS_URL=[NATS instance URL] \
|
MF_BROKER_URL=[Message broker instance URL] \
|
||||||
MF_OPCUA_ADAPTER_INTERVAL_MS: [OPC-UA Server Interval (milliseconds)] \
|
MF_OPCUA_ADAPTER_INTERVAL_MS: [OPC-UA Server Interval (milliseconds)] \
|
||||||
MF_OPCUA_ADAPTER_POLICY=[OPC-UA Server Policy] \
|
MF_OPCUA_ADAPTER_POLICY=[OPC-UA Server Policy] \
|
||||||
MF_OPCUA_ADAPTER_MODE=[OPC-UA Server Mode] \
|
MF_OPCUA_ADAPTER_MODE=[OPC-UA Server Mode] \
|
||||||
|
@ -203,7 +203,7 @@ func (c client) runHandler(ctx context.Context, sub *opcuaGopcua.Subscription, u
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Publish forwards messages from the OPC-UA Server to Mainflux NATS broker
|
// Publish forwards messages from the OPC-UA Server to Mainflux Message broker
|
||||||
func (c client) publish(ctx context.Context, token string, m message) error {
|
func (c client) publish(ctx context.Context, token string, m message) error {
|
||||||
// Get route-map of the OPC-UA ServerURI
|
// Get route-map of the OPC-UA ServerURI
|
||||||
chanID, err := c.channelsRM.Get(ctx, m.ServerURI)
|
chanID, err := c.channelsRM.Get(ctx, m.ServerURI)
|
||||||
@ -223,7 +223,7 @@ func (c client) publish(ctx context.Context, token string, m message) error {
|
|||||||
return fmt.Errorf("%s between channel %s and thing %s", errNotFoundConn, chanID, thingID)
|
return fmt.Errorf("%s between channel %s and thing %s", errNotFoundConn, chanID, thingID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Publish on Mainflux NATS broker
|
// Publish on Mainflux Message broker
|
||||||
SenML := fmt.Sprintf(`[{"n":"%s", "t": %d, "%s":%v}]`, m.Type, m.Time, m.DataKey, m.Data)
|
SenML := fmt.Sprintf(`[{"n":"%s", "t": %d, "%s":%v}]`, m.Type, m.Time, m.DataKey, m.Data)
|
||||||
payload := []byte(SenML)
|
payload := []byte(SenML)
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
`messaging` package defines `Publisher`, `Subscriber` and an aggregate `Pubsub` interface.
|
`messaging` package defines `Publisher`, `Subscriber` and an aggregate `Pubsub` interface.
|
||||||
|
|
||||||
`Subscriber` interface defines methods used to subscribe to a message broker such as MQTT or NATS.
|
`Subscriber` interface defines methods used to subscribe to a message broker such as MQTT or NATS or RabbitMQ.
|
||||||
|
|
||||||
`Publisher` interface defines methods used to publish messages to a message broker such as MQTT or NATS.
|
`Publisher` interface defines methods used to publish messages to a message broker such as MQTT or NATS or RabbitMQ.
|
||||||
|
|
||||||
`Pubsub` interface is composed of `Publisher` and `Subscriber` interface and can be used to send messages to as well as to receive messages from a message broker.
|
`Pubsub` interface is composed of `Publisher` and `Subscriber` interface and can be used to send messages to as well as to receive messages from a message broker.
|
||||||
|
39
pkg/messaging/brokers/brokers_nats.go
Normal file
39
pkg/messaging/brokers/brokers_nats.go
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
//go:build !rabbitmq
|
||||||
|
// +build !rabbitmq
|
||||||
|
|
||||||
|
// Copyright (c) Mainflux
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package brokers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/mainflux/mainflux/logger"
|
||||||
|
"github.com/mainflux/mainflux/pkg/messaging"
|
||||||
|
"github.com/mainflux/mainflux/pkg/messaging/nats"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SubjectAllChannels represents subject to subscribe for all the channels.
|
||||||
|
const SubjectAllChannels = "channels.>"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
log.Println("The binary was build using Nats as the message broker")
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewPublisher(url string) (messaging.Publisher, error) {
|
||||||
|
pb, err := nats.NewPublisher(url)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return pb, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewPubSub(url, queue string, logger logger.Logger) (messaging.PubSub, error) {
|
||||||
|
pb, err := nats.NewPubSub(url, queue, logger)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return pb, nil
|
||||||
|
}
|
38
pkg/messaging/brokers/brokers_rabbitmq.go
Normal file
38
pkg/messaging/brokers/brokers_rabbitmq.go
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
//go:build rabbitmq
|
||||||
|
// +build rabbitmq
|
||||||
|
|
||||||
|
// Copyright (c) Mainflux
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package brokers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/mainflux/mainflux/logger"
|
||||||
|
"github.com/mainflux/mainflux/pkg/messaging"
|
||||||
|
"github.com/mainflux/mainflux/pkg/messaging/rabbitmq"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SubjectAllChannels represents subject to subscribe for all the channels.
|
||||||
|
const SubjectAllChannels = "channels.>"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
log.Println("The binary was build using RabbitMQ as the message broker")
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewPublisher(url string) (messaging.Publisher, error) {
|
||||||
|
pb, err := rabbitmq.NewPublisher(url)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return pb, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewPubSub(url, queue string, logger logger.Logger) (messaging.PubSub, error) {
|
||||||
|
pb, err := rabbitmq.NewPubSub(url, queue, logger)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return pb, nil
|
||||||
|
}
|
@ -23,7 +23,7 @@ type publisher struct {
|
|||||||
|
|
||||||
// NewPublisher returns a new MQTT message publisher.
|
// NewPublisher returns a new MQTT message publisher.
|
||||||
func NewPublisher(address string, timeout time.Duration) (messaging.Publisher, error) {
|
func NewPublisher(address string, timeout time.Duration) (messaging.Publisher, error) {
|
||||||
client, err := newClient(address, timeout)
|
client, err := newClient(address, "mqtt-publisher", timeout)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -47,3 +47,8 @@ func (pub publisher) Publish(topic string, msg messaging.Message) error {
|
|||||||
|
|
||||||
return token.Error()
|
return token.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (pub publisher) Close() error {
|
||||||
|
pub.client.Disconnect(uint(pub.timeout))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -5,9 +5,14 @@ package mqtt
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
mqtt "github.com/eclipse/paho.mqtt.golang"
|
mqtt "github.com/eclipse/paho.mqtt.golang"
|
||||||
|
"github.com/gogo/protobuf/proto"
|
||||||
|
log "github.com/mainflux/mainflux/logger"
|
||||||
|
"github.com/mainflux/mainflux/pkg/messaging"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -15,12 +20,142 @@ const (
|
|||||||
qos = 2
|
qos = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
var errConnect = errors.New("failed to connect to MQTT broker")
|
var (
|
||||||
|
errConnect = errors.New("failed to connect to MQTT broker")
|
||||||
|
errSubscribeTimeout = errors.New("failed to subscribe due to timeout reached")
|
||||||
|
errUnsubscribeTimeout = errors.New("failed to unsubscribe due to timeout reached")
|
||||||
|
errUnsubscribeDeleteTopic = errors.New("failed to unsubscribe due to deletion of topic")
|
||||||
|
errAlreadySubscribed = errors.New("already subscribed to topic")
|
||||||
|
errNotSubscribed = errors.New("not subscribed")
|
||||||
|
errEmptyTopic = errors.New("empty topic")
|
||||||
|
errEmptyID = errors.New("empty ID")
|
||||||
|
)
|
||||||
|
|
||||||
func newClient(address string, timeout time.Duration) (mqtt.Client, error) {
|
var _ messaging.PubSub = (*pubsub)(nil)
|
||||||
opts := mqtt.NewClientOptions().
|
|
||||||
SetUsername(username).
|
type subscription struct {
|
||||||
AddBroker(address)
|
client mqtt.Client
|
||||||
|
topics []string
|
||||||
|
}
|
||||||
|
|
||||||
|
type pubsub struct {
|
||||||
|
publisher
|
||||||
|
logger log.Logger
|
||||||
|
mu *sync.RWMutex
|
||||||
|
address string
|
||||||
|
timeout time.Duration
|
||||||
|
subscriptions map[string]subscription
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewPubSub(url, queue string, timeout time.Duration, logger log.Logger) (messaging.PubSub, error) {
|
||||||
|
client, err := newClient(url, "mqtt-publisher", timeout)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
ret := pubsub{
|
||||||
|
publisher: publisher{
|
||||||
|
client: client,
|
||||||
|
timeout: timeout,
|
||||||
|
},
|
||||||
|
address: url,
|
||||||
|
timeout: timeout,
|
||||||
|
logger: logger,
|
||||||
|
subscriptions: make(map[string]subscription),
|
||||||
|
}
|
||||||
|
return ret, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ps pubsub) Subscribe(id, topic string, handler messaging.MessageHandler) error {
|
||||||
|
if id == "" {
|
||||||
|
return errEmptyID
|
||||||
|
}
|
||||||
|
if topic == "" {
|
||||||
|
return errEmptyTopic
|
||||||
|
}
|
||||||
|
ps.mu.Lock()
|
||||||
|
defer ps.mu.Unlock()
|
||||||
|
// Check client ID
|
||||||
|
s, ok := ps.subscriptions[id]
|
||||||
|
switch ok {
|
||||||
|
case true:
|
||||||
|
// Check topic
|
||||||
|
if ok = s.contains(topic); ok {
|
||||||
|
return errAlreadySubscribed
|
||||||
|
}
|
||||||
|
s.topics = append(s.topics, topic)
|
||||||
|
default:
|
||||||
|
client, err := newClient(ps.address, id, ps.timeout)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
s = subscription{
|
||||||
|
client: client,
|
||||||
|
topics: []string{topic},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
token := s.client.Subscribe(topic, qos, ps.mqttHandler(handler))
|
||||||
|
if token.Error() != nil {
|
||||||
|
return token.Error()
|
||||||
|
}
|
||||||
|
if ok := token.WaitTimeout(ps.timeout); !ok {
|
||||||
|
return errSubscribeTimeout
|
||||||
|
}
|
||||||
|
return token.Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ps pubsub) Unsubscribe(id, topic string) error {
|
||||||
|
if id == "" {
|
||||||
|
return errEmptyID
|
||||||
|
}
|
||||||
|
if topic == "" {
|
||||||
|
return errEmptyTopic
|
||||||
|
}
|
||||||
|
ps.mu.Lock()
|
||||||
|
defer ps.mu.Unlock()
|
||||||
|
// Check client ID
|
||||||
|
s, ok := ps.subscriptions[id]
|
||||||
|
switch ok {
|
||||||
|
case true:
|
||||||
|
// Check topic
|
||||||
|
if ok := s.contains(topic); !ok {
|
||||||
|
return errNotSubscribed
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return errNotSubscribed
|
||||||
|
}
|
||||||
|
token := s.client.Unsubscribe(topic)
|
||||||
|
if token.Error() != nil {
|
||||||
|
return token.Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
ok = token.WaitTimeout(ps.timeout)
|
||||||
|
if !ok {
|
||||||
|
return errUnsubscribeTimeout
|
||||||
|
}
|
||||||
|
if ok := s.delete(topic); !ok {
|
||||||
|
return errUnsubscribeDeleteTopic
|
||||||
|
}
|
||||||
|
if len(s.topics) == 0 {
|
||||||
|
delete(ps.subscriptions, id)
|
||||||
|
}
|
||||||
|
return token.Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ps pubsub) mqttHandler(h messaging.MessageHandler) mqtt.MessageHandler {
|
||||||
|
return func(c mqtt.Client, m mqtt.Message) {
|
||||||
|
var msg messaging.Message
|
||||||
|
if err := proto.Unmarshal(m.Payload(), &msg); err != nil {
|
||||||
|
ps.logger.Warn(fmt.Sprintf("Failed to unmarshal received message: %s", err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := h.Handle(msg); err != nil {
|
||||||
|
ps.logger.Warn(fmt.Sprintf("Failed to handle Mainflux message: %s", err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func newClient(address, id string, timeout time.Duration) (mqtt.Client, error) {
|
||||||
|
opts := mqtt.NewClientOptions().SetUsername(username).AddBroker(address).SetClientID(id)
|
||||||
client := mqtt.NewClient(opts)
|
client := mqtt.NewClient(opts)
|
||||||
token := client.Connect()
|
token := client.Connect()
|
||||||
if token.Error() != nil {
|
if token.Error() != nil {
|
||||||
@ -38,3 +173,31 @@ func newClient(address string, timeout time.Duration) (mqtt.Client, error) {
|
|||||||
|
|
||||||
return client, nil
|
return client, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// contains checks if a topic is present
|
||||||
|
func (sub subscription) contains(topic string) bool {
|
||||||
|
return sub.indexOf(topic) != -1
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finds the index of an item in the topics
|
||||||
|
func (sub subscription) indexOf(element string) int {
|
||||||
|
for k, v := range sub.topics {
|
||||||
|
if element == v {
|
||||||
|
return k
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deletes a topic from the slice
|
||||||
|
func (sub subscription) delete(topic string) bool {
|
||||||
|
index := sub.indexOf(topic)
|
||||||
|
if index == -1 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
topics := make([]string, len(sub.topics)-1)
|
||||||
|
copy(topics[:index], sub.topics[:index])
|
||||||
|
copy(topics[index:], sub.topics[index+1:])
|
||||||
|
sub.topics = topics
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
@ -1,172 +0,0 @@
|
|||||||
// Copyright (c) Mainflux
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
package mqtt
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"sync"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
mqtt "github.com/eclipse/paho.mqtt.golang"
|
|
||||||
"github.com/gogo/protobuf/proto"
|
|
||||||
|
|
||||||
log "github.com/mainflux/mainflux/logger"
|
|
||||||
"github.com/mainflux/mainflux/pkg/errors"
|
|
||||||
"github.com/mainflux/mainflux/pkg/messaging"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
errSubscribeTimeout = errors.New("failed to subscribe due to timeout reached")
|
|
||||||
errUnsubscribeTimeout = errors.New("failed to unsubscribe due to timeout reached")
|
|
||||||
errUnsubscribeDeleteTopic = errors.New("failed to unsubscribe due to deletion of topic")
|
|
||||||
errAlreadySubscribed = errors.New("already subscribed to topic")
|
|
||||||
errNotSubscribed = errors.New("not subscribed")
|
|
||||||
errEmptyTopic = errors.New("empty topic")
|
|
||||||
errEmptyID = errors.New("empty ID")
|
|
||||||
)
|
|
||||||
|
|
||||||
var _ messaging.Subscriber = (*subscriber)(nil)
|
|
||||||
|
|
||||||
type subscription struct {
|
|
||||||
client mqtt.Client
|
|
||||||
topics []string
|
|
||||||
}
|
|
||||||
|
|
||||||
type subscriber struct {
|
|
||||||
address string
|
|
||||||
timeout time.Duration
|
|
||||||
logger log.Logger
|
|
||||||
subscriptions map[string]subscription
|
|
||||||
mu *sync.RWMutex
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewSubscriber returns a new MQTT message subscriber.
|
|
||||||
func NewSubscriber(address string, timeout time.Duration, logger log.Logger) (messaging.Subscriber, error) {
|
|
||||||
ret := subscriber{
|
|
||||||
address: address,
|
|
||||||
timeout: timeout,
|
|
||||||
logger: logger,
|
|
||||||
subscriptions: make(map[string]subscription),
|
|
||||||
}
|
|
||||||
return ret, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (sub subscriber) Subscribe(id, topic string, handler messaging.MessageHandler) error {
|
|
||||||
if id == "" {
|
|
||||||
return errEmptyID
|
|
||||||
}
|
|
||||||
if topic == "" {
|
|
||||||
return errEmptyTopic
|
|
||||||
}
|
|
||||||
sub.mu.Lock()
|
|
||||||
defer sub.mu.Unlock()
|
|
||||||
// Check client ID
|
|
||||||
s, ok := sub.subscriptions[id]
|
|
||||||
switch ok {
|
|
||||||
case true:
|
|
||||||
// Check topic
|
|
||||||
if ok = s.contains(topic); ok {
|
|
||||||
return errAlreadySubscribed
|
|
||||||
}
|
|
||||||
s.topics = append(s.topics, topic)
|
|
||||||
default:
|
|
||||||
opts := mqtt.NewClientOptions().SetUsername(username).AddBroker(sub.address).SetClientID(id)
|
|
||||||
client := mqtt.NewClient(opts)
|
|
||||||
token := client.Connect()
|
|
||||||
if token.Error() != nil {
|
|
||||||
return token.Error()
|
|
||||||
}
|
|
||||||
s = subscription{
|
|
||||||
client: client,
|
|
||||||
topics: []string{topic},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
token := s.client.Subscribe(topic, qos, sub.mqttHandler(handler))
|
|
||||||
if token.Error() != nil {
|
|
||||||
return token.Error()
|
|
||||||
}
|
|
||||||
if ok := token.WaitTimeout(sub.timeout); !ok {
|
|
||||||
return errSubscribeTimeout
|
|
||||||
}
|
|
||||||
return token.Error()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (sub subscriber) Unsubscribe(id, topic string) error {
|
|
||||||
if id == "" {
|
|
||||||
return errEmptyID
|
|
||||||
}
|
|
||||||
if topic == "" {
|
|
||||||
return errEmptyTopic
|
|
||||||
}
|
|
||||||
sub.mu.Lock()
|
|
||||||
defer sub.mu.Unlock()
|
|
||||||
// Check client ID
|
|
||||||
s, ok := sub.subscriptions[id]
|
|
||||||
switch ok {
|
|
||||||
case true:
|
|
||||||
// Check topic
|
|
||||||
if ok := s.contains(topic); !ok {
|
|
||||||
return errNotSubscribed
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return errNotSubscribed
|
|
||||||
}
|
|
||||||
token := s.client.Unsubscribe(topic)
|
|
||||||
if token.Error() != nil {
|
|
||||||
return token.Error()
|
|
||||||
}
|
|
||||||
|
|
||||||
ok = token.WaitTimeout(sub.timeout)
|
|
||||||
if !ok {
|
|
||||||
return errUnsubscribeTimeout
|
|
||||||
}
|
|
||||||
if ok := s.delete(topic); !ok {
|
|
||||||
return errUnsubscribeDeleteTopic
|
|
||||||
}
|
|
||||||
if len(s.topics) == 0 {
|
|
||||||
delete(sub.subscriptions, id)
|
|
||||||
}
|
|
||||||
return token.Error()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (sub subscriber) mqttHandler(h messaging.MessageHandler) mqtt.MessageHandler {
|
|
||||||
return func(c mqtt.Client, m mqtt.Message) {
|
|
||||||
var msg messaging.Message
|
|
||||||
if err := proto.Unmarshal(m.Payload(), &msg); err != nil {
|
|
||||||
sub.logger.Warn(fmt.Sprintf("Failed to unmarshal received message: %s", err))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := h.Handle(msg); err != nil {
|
|
||||||
sub.logger.Warn(fmt.Sprintf("Failed to handle Mainflux message: %s", err))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// contains checks if a topic is present
|
|
||||||
func (sub subscription) contains(topic string) bool {
|
|
||||||
return sub.indexOf(topic) != -1
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finds the index of an item in the topics
|
|
||||||
func (sub subscription) indexOf(element string) int {
|
|
||||||
for k, v := range sub.topics {
|
|
||||||
if element == v {
|
|
||||||
return k
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deletes a topic from the slice
|
|
||||||
func (sub subscription) delete(topic string) bool {
|
|
||||||
index := sub.indexOf(topic)
|
|
||||||
if index == -1 {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
topics := make([]string, len(sub.topics)-1)
|
|
||||||
copy(topics[:index], sub.topics[:index])
|
|
||||||
copy(topics[index:], sub.topics[index+1:])
|
|
||||||
sub.topics = topics
|
|
||||||
return true
|
|
||||||
}
|
|
@ -19,13 +19,9 @@ type publisher struct {
|
|||||||
|
|
||||||
// Publisher wraps messaging Publisher exposing
|
// Publisher wraps messaging Publisher exposing
|
||||||
// Close() method for NATS connection.
|
// Close() method for NATS connection.
|
||||||
type Publisher interface {
|
|
||||||
messaging.Publisher
|
|
||||||
Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewPublisher returns NATS message Publisher.
|
// NewPublisher returns NATS message Publisher.
|
||||||
func NewPublisher(url string) (Publisher, error) {
|
func NewPublisher(url string) (messaging.Publisher, error) {
|
||||||
conn, err := broker.Connect(url)
|
conn, err := broker.Connect(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -56,6 +52,7 @@ func (pub *publisher) Publish(topic string, msg messaging.Message) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pub *publisher) Close() {
|
func (pub *publisher) Close() error {
|
||||||
pub.conn.Close()
|
pub.conn.Close()
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -17,9 +17,6 @@ import (
|
|||||||
|
|
||||||
const chansPrefix = "channels"
|
const chansPrefix = "channels"
|
||||||
|
|
||||||
// SubjectAllChannels represents subject to subscribe for all the channels.
|
|
||||||
const SubjectAllChannels = "channels.>"
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ErrAlreadySubscribed = errors.New("already subscribed to topic")
|
ErrAlreadySubscribed = errors.New("already subscribed to topic")
|
||||||
ErrNotSubscribed = errors.New("not subscribed")
|
ErrNotSubscribed = errors.New("not subscribed")
|
||||||
@ -29,13 +26,6 @@ var (
|
|||||||
|
|
||||||
var _ messaging.PubSub = (*pubsub)(nil)
|
var _ messaging.PubSub = (*pubsub)(nil)
|
||||||
|
|
||||||
// PubSub wraps messaging Publisher exposing
|
|
||||||
// Close() method for NATS connection.
|
|
||||||
type PubSub interface {
|
|
||||||
messaging.PubSub
|
|
||||||
Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
type subscription struct {
|
type subscription struct {
|
||||||
*broker.Subscription
|
*broker.Subscription
|
||||||
cancel func() error
|
cancel func() error
|
||||||
@ -56,7 +46,7 @@ type pubsub struct {
|
|||||||
// from ordinary subscribe. For more information, please take a look
|
// from ordinary subscribe. For more information, please take a look
|
||||||
// here: https://docs.nats.io/developing-with-nats/receiving/queues.
|
// here: https://docs.nats.io/developing-with-nats/receiving/queues.
|
||||||
// If the queue is empty, Subscribe will be used.
|
// If the queue is empty, Subscribe will be used.
|
||||||
func NewPubSub(url, queue string, logger log.Logger) (PubSub, error) {
|
func NewPubSub(url, queue string, logger log.Logger) (messaging.PubSub, error) {
|
||||||
conn, err := broker.Connect(url)
|
conn, err := broker.Connect(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -7,6 +7,9 @@ package messaging
|
|||||||
type Publisher interface {
|
type Publisher interface {
|
||||||
// Publishes message to the stream.
|
// Publishes message to the stream.
|
||||||
Publish(topic string, msg Message) error
|
Publish(topic string, msg Message) error
|
||||||
|
|
||||||
|
// Close gracefully closes message publisher's connection.
|
||||||
|
Close() error
|
||||||
}
|
}
|
||||||
|
|
||||||
// MessageHandler represents Message handler for Subscriber.
|
// MessageHandler represents Message handler for Subscriber.
|
||||||
@ -26,6 +29,9 @@ type Subscriber interface {
|
|||||||
// Unsubscribe unsubscribes from the message stream and
|
// Unsubscribe unsubscribes from the message stream and
|
||||||
// stops consuming messages.
|
// stops consuming messages.
|
||||||
Unsubscribe(id, topic string) error
|
Unsubscribe(id, topic string) error
|
||||||
|
|
||||||
|
// Close gracefully closes message subscriber's connection.
|
||||||
|
Close() error
|
||||||
}
|
}
|
||||||
|
|
||||||
// PubSub represents aggregation interface for publisher and subscriber.
|
// PubSub represents aggregation interface for publisher and subscriber.
|
||||||
|
@ -18,17 +18,9 @@ type publisher struct {
|
|||||||
ch *amqp.Channel
|
ch *amqp.Channel
|
||||||
}
|
}
|
||||||
|
|
||||||
// Publisher wraps messaging Publisher exposing
|
|
||||||
// Close() method for RabbitMQ connection.
|
|
||||||
type Publisher interface {
|
|
||||||
messaging.Publisher
|
|
||||||
Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewPublisher returns RabbitMQ message Publisher.
|
// NewPublisher returns RabbitMQ message Publisher.
|
||||||
func NewPublisher(url string) (Publisher, error) {
|
func NewPublisher(url string) (messaging.Publisher, error) {
|
||||||
endpoint := fmt.Sprintf("amqp://%s", url)
|
conn, err := amqp.Dial(url)
|
||||||
conn, err := amqp.Dial(endpoint)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -55,7 +47,6 @@ func (pub *publisher) Publish(topic string, msg messaging.Message) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
subject := fmt.Sprintf("%s.%s", chansPrefix, topic)
|
subject := fmt.Sprintf("%s.%s", chansPrefix, topic)
|
||||||
if msg.Subtopic != "" {
|
if msg.Subtopic != "" {
|
||||||
subject = fmt.Sprintf("%s.%s", subject, msg.Subtopic)
|
subject = fmt.Sprintf("%s.%s", subject, msg.Subtopic)
|
||||||
@ -79,6 +70,6 @@ func (pub *publisher) Publish(topic string, msg messaging.Message) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pub *publisher) Close() {
|
func (pub *publisher) Close() error {
|
||||||
pub.conn.Close()
|
return pub.conn.Close()
|
||||||
}
|
}
|
||||||
|
@ -30,13 +30,6 @@ var (
|
|||||||
|
|
||||||
var _ messaging.PubSub = (*pubsub)(nil)
|
var _ messaging.PubSub = (*pubsub)(nil)
|
||||||
|
|
||||||
// PubSub wraps messaging Publisher exposing
|
|
||||||
// Close() method for RabbitMQ connection.
|
|
||||||
type PubSub interface {
|
|
||||||
messaging.PubSub
|
|
||||||
Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
type subscription struct {
|
type subscription struct {
|
||||||
cancel func() error
|
cancel func() error
|
||||||
}
|
}
|
||||||
@ -48,9 +41,8 @@ type pubsub struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewPubSub returns RabbitMQ message publisher/subscriber.
|
// NewPubSub returns RabbitMQ message publisher/subscriber.
|
||||||
func NewPubSub(url, queue string, logger log.Logger) (PubSub, error) {
|
func NewPubSub(url, queue string, logger log.Logger) (messaging.PubSub, error) {
|
||||||
endpoint := fmt.Sprintf("amqp://%s", url)
|
conn, err := amqp.Dial(url)
|
||||||
conn, err := amqp.Dial(endpoint)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -28,13 +28,13 @@ func TestMain(m *testing.M) {
|
|||||||
log.Fatalf("Could not connect to docker: %s", err)
|
log.Fatalf("Could not connect to docker: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
container, err := pool.Run("rabbitmq", "3.9.10", []string{})
|
container, err := pool.Run("rabbitmq", "3.9.20", []string{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Could not start container: %s", err)
|
log.Fatalf("Could not start container: %s", err)
|
||||||
}
|
}
|
||||||
handleInterrupt(pool, container)
|
handleInterrupt(pool, container)
|
||||||
|
|
||||||
address := fmt.Sprintf("%s:%s", "localhost", container.GetPort("5672/tcp"))
|
address := fmt.Sprintf("amqp://%s:%s", "localhost", container.GetPort("5672/tcp"))
|
||||||
if err := pool.Retry(func() error {
|
if err := pool.Retry(func() error {
|
||||||
publisher, err = rabbitmq.NewPublisher(address)
|
publisher, err = rabbitmq.NewPublisher(address)
|
||||||
return err
|
return err
|
||||||
|
@ -64,6 +64,8 @@ setup_mf() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
echo "Compile check for rabbitmq..."
|
||||||
|
MF_BROKER_TYPE=rabbitmq make http
|
||||||
make -j$NPROC
|
make -j$NPROC
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,12 +22,12 @@ default values.
|
|||||||
| MF_TWINS_DB | Database name | mainflux |
|
| MF_TWINS_DB | Database name | mainflux |
|
||||||
| MF_TWINS_DB_HOST | Database host address | localhost |
|
| MF_TWINS_DB_HOST | Database host address | localhost |
|
||||||
| MF_TWINS_DB_PORT | Database host port | 27017 |
|
| MF_TWINS_DB_PORT | Database host port | 27017 |
|
||||||
| MF_THINGS_STANDALONE_EMAIL | User email for standalone mode (no gRPC communication with users) | |
|
| MF_THINGS_STANDALONE_EMAIL | User email for standalone mode (no gRPC communication with users) | |
|
||||||
| MF_THINGS_STANDALONE_TOKEN | User token for standalone mode that should be passed in auth header | |
|
| MF_THINGS_STANDALONE_TOKEN | User token for standalone mode that should be passed in auth header | |
|
||||||
| MF_TWINS_CLIENT_TLS | Flag that indicates if TLS should be turned on | false |
|
| MF_TWINS_CLIENT_TLS | Flag that indicates if TLS should be turned on | false |
|
||||||
| MF_TWINS_CA_CERTS | Path to trusted CAs in PEM format | |
|
| MF_TWINS_CA_CERTS | Path to trusted CAs in PEM format | |
|
||||||
| MF_TWINS_CHANNEL_ID | NATS notifications channel ID | |
|
| MF_TWINS_CHANNEL_ID | Message broker notifications channel ID | |
|
||||||
| MF_NATS_URL | Mainflux NATS broker URL | nats://localhost:4222 |
|
| MF_BROKER_URL | Mainflux Message broker URL | nats://localhost:4222 |
|
||||||
| MF_AUTH_GRPC_URL | Auth service gRPC URL | localhost:8181 |
|
| MF_AUTH_GRPC_URL | Auth service gRPC URL | localhost:8181 |
|
||||||
| MF_AUTH_GRPC_TIMEOUT | Auth service gRPC request timeout in seconds | 1s |
|
| MF_AUTH_GRPC_TIMEOUT | Auth service gRPC request timeout in seconds | 1s |
|
||||||
| MF_TWINS_CACHE_URL | Cache database URL | localhost:6379 |
|
| MF_TWINS_CACHE_URL | Cache database URL | localhost:6379 |
|
||||||
@ -67,8 +67,8 @@ MF_THINGS_STANDALONE_EMAIL=[User email for standalone mode (no gRPC communicatio
|
|||||||
MF_THINGS_STANDALONE_TOKEN=[User token for standalone mode that should be passed in auth header] \
|
MF_THINGS_STANDALONE_TOKEN=[User token for standalone mode that should be passed in auth header] \
|
||||||
MF_TWINS_CLIENT_TLS: [Flag that indicates if TLS should be turned on] \
|
MF_TWINS_CLIENT_TLS: [Flag that indicates if TLS should be turned on] \
|
||||||
MF_TWINS_CA_CERTS: [Path to trusted CAs in PEM format] \
|
MF_TWINS_CA_CERTS: [Path to trusted CAs in PEM format] \
|
||||||
MF_TWINS_CHANNEL_ID: [NATS notifications channel ID] \
|
MF_TWINS_CHANNEL_ID: [Message broker notifications channel ID] \
|
||||||
MF_NATS_URL: [Mainflux NATS broker URL] \
|
MF_BROKER_URL: [Mainflux Message broker URL] \
|
||||||
MF_AUTH_GRPC_URL: [Auth service gRPC URL] \
|
MF_AUTH_GRPC_URL: [Auth service gRPC URL] \
|
||||||
MF_AUTH_GRPC_TIMEOUT: [Auth service gRPC request timeout in seconds] \
|
MF_AUTH_GRPC_TIMEOUT: [Auth service gRPC request timeout in seconds] \
|
||||||
$GOBIN/mainflux-twins
|
$GOBIN/mainflux-twins
|
||||||
@ -78,7 +78,7 @@ $GOBIN/mainflux-twins
|
|||||||
|
|
||||||
### Starting twins service
|
### Starting twins service
|
||||||
|
|
||||||
The twins service publishes notifications on a NATS subject of the format
|
The twins service publishes notifications on a Message broker subject of the format
|
||||||
`channels.<MF_TWINS_CHANNEL_ID>.messages.<twinID>.<crudOp>`, where `crudOp`
|
`channels.<MF_TWINS_CHANNEL_ID>.messages.<twinID>.<crudOp>`, where `crudOp`
|
||||||
stands for the crud operation done on twin - create, update, delete or
|
stands for the crud operation done on twin - create, update, delete or
|
||||||
retrieve - or state - save state. In order to use twin service notifications,
|
retrieve - or state - save state. In order to use twin service notifications,
|
||||||
|
@ -27,3 +27,7 @@ func (mb mockBroker) Publish(topic string, msg messaging.Message) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (mb mockBroker) Close() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -422,6 +422,6 @@ func (ts *twinsService) publish(twinID *string, err *error, succOp, failOp strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := ts.publisher.Publish(msg.Channel, msg); err != nil {
|
if err := ts.publisher.Publish(msg.Channel, msg); err != nil {
|
||||||
ts.logger.Warn(fmt.Sprintf("Failed to publish notification on NATS: %s", err))
|
ts.logger.Warn(fmt.Sprintf("Failed to publish notification on Message Broker: %s", err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user