Mainflux.mainflux/coap
b1ackd0t 4401e79a0d
NOISSUE - Add Subscriber Config (#1896)
* Replace Nats with Nats Jestream For PubSub

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* Add Stream Description

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* Fix connection leak in NATS publisher

The publisher struct in pkg/messaging/nats/publisher.go was modified to include a new `conn` field of type `*broker.Conn`. This change was made to fix a connection leak issue in the NATS publisher.

The `NewPublisher` function was updated to assign the `conn` parameter to the new `conn` field in the publisher struct.

Additionally, the `Close` method in the publisher struct was modified to close the `conn` connection.

This commit fixes the connection leak issue in the NATS publisher and ensures that connections are properly closed.

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* Setup subscriber config to contain handler topic and ID

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* Add delivery policy

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* Avoid duplicate messages

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* Rename to DeliveryPolicy

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* Fix tests

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* Not check for data result set when we are returning subset of messages

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>

* For unsubscribe remove config

Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>

* Fix comment

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

---------

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
2023-10-23 15:27:15 +02:00
..
api NOISSUE - Change import name aliases (#1868) 2023-08-11 11:30:25 +02:00
tracing NOISSUE - Add More Linters (#1924) 2023-10-16 11:43:33 +02:00
README.md NOISSUE - Make MQTT Broker Configurable (#1904) 2023-10-19 21:01:09 +02:00
adapter.go NOISSUE - Add Subscriber Config (#1896) 2023-10-23 15:27:15 +02:00
client.go NOISSUE - Make MQTT Broker Configurable (#1904) 2023-10-19 21:01:09 +02:00

README.md

Mainflux CoAP Adapter

Mainflux CoAP adapter provides an CoAP API for sending messages through the platform.

Configuration

The service is configured using the environment variables presented in the following table. Note that any unset variables will be replaced with their default values.

Variable Description Default
MF_COAP_ADAPTER_LOG_LEVEL Service log level info
MF_COAP_ADAPTER_HOST CoAP service listening host
MF_COAP_ADAPTER_PORT CoAP service listening port 5683
MF_COAP_ADAPTER_SERVER_CERT CoAP service server certificate
MF_COAP_ADAPTER_SERVER_KEY CoAP service server key
MF_COAP_ADAPTER_HTTP_HOST Service HTTP listening host
MF_COAP_ADAPTER_HTTP_PORT Service listening port 5683
MF_COAP_ADAPTER_HTTP_SERVER_CERT Service server certificate
MF_COAP_ADAPTER_HTTP_SERVER_KEY Service server key
MF_THINGS_AUTH_GRPC_URL Things service Auth gRPC URL localhost:7000
MF_THINGS_AUTH_GRPC_TIMEOUT Things service Auth gRPC request timeout in seconds 1s
MF_THINGS_AUTH_GRPC_CLIENT_TLS Flag that indicates if TLS should be turned on false
MF_THINGS_AUTH_GRPC_CA_CERTS Path to trusted CAs in PEM format
MF_MESSAGE_BROKER_URL Message broker instance URL nats://localhost:4222
MF_JAEGER_URL Jaeger server URL http://jaeger:14268/api/traces
MF_SEND_TELEMETRY Send telemetry to mainflux call home server true
MF_COAP_ADAPTER_INSTANCE_ID CoAP adapter instance ID

Deployment

The service itself is distributed as Docker container. Check the coap-adapter service section in docker-compose to see how service is deployed.

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:

# download the latest version of the service
git clone https://github.com/mainflux/mainflux

cd mainflux

# compile the http
make coap

# copy binary to bin
make install

# set the environment variables and run the service
MF_COAP_ADAPTER_LOG_LEVEL=[Service log level] \
MF_COAP_ADAPTER_HOST=[CoAP service host] \
MF_COAP_ADAPTER_PORT=[CoAP service port] \
MF_COAP_ADAPTER_SERVER_CERT=[Path to CoAP server certificate] \
MF_COAP_ADAPTER_SERVER_KEY=[Path to CoAP server key] \
MF_COAP_ADAPTER_HTTP_HOST=[CoAP HTTP service host] \
MF_COAP_ADAPTER_HTTP_PORT=[CoAP HTTP service port] \
MF_COAP_ADAPTER_HTTP_SERVER_CERT=[Path to HTTP server certificate] \
MF_COAP_ADAPTER_HTTP_SERVER_KEY=[Path to HTTP server key] \
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_CLIENT_TLS=[Flag that indicates if TLS should be turned on] \
MF_THINGS_AUTH_GRPC_CA_CERTS=[Path to trusted CAs in PEM format] \
MF_MESSAGE_BROKER_URL=[Message broker instance URL] \
MF_JAEGER_URL=[Jaeger server URL] \
MF_SEND_TELEMETRY=[Send telemetry to mainflux call home server] \
MF_COAP_ADAPTER_INSTANCE_ID=[CoAP adapter instance ID] \
$GOBIN/mainflux-coap

Usage

If CoAP adapter is running locally (on default 5683 port), a valid URL would be: coap://localhost/channels/<channel_id>/messages?auth=<thing_auth_key>. Since CoAP protocol does not support Authorization header (option) and options have limited size, in order to send CoAP messages, valid auth value (a valid Thing key) must be present in Uri-Query option.