nuttx-apps/system/psmq
2023-01-05 21:42:15 +08:00
..
.gitignore
Kconfig
Make.defs
Makefile
README.md

System / psmq Publish Subscribe Message Queue

psmq is publish subscribe message queue. It's a set of programs and libraries to implement publish/subscribe way of inter-process communication on top of POSIX message queue.

Manuals, source code and more info at: https://psmq.bofc.pl

Little demo using psmqd broker, psmq_pub and psmq_sub:

Start broker and make it log to file

nsh> psmqd -b/brok -p/sd/psmqd/psmqd.log &

Start subscribe thread that will read all messages send on /can/* and /adc/* topic, and dump all readings to file

nsh> psmq_sub -n/sub -b/brok -t/can/* -t/adc/* -o/sd/psmq-sub/can.log &
n/connected to broker /brok
n/subscribed to: /can/*
n/subscribed to: /adc/*
n/start receiving data
n/reply timeout set 100

Publish some messages

nsh> psmq_pub -b/brok -t/can/engine/rpm -m50
nsh> psmq_pub -b/brok -t/adc/volt -m30
nsh> psmq_pub -b/brok -t/can/room/10/temp -m23
nsh> psmq_pub -b/brok -t/pwm/fan1/speed -m300

Check out subscribe thread logs

nsh> cat /sd/psmq-sub/can.log
[2021-05-23 17:53:59] p:0 l:   3  /can/engine/rpm  50
[2021-05-23 17:53:59] p:0 l:   3  /adc/volt  30
[2021-05-23 17:53:59] p:0 l:   3  /can/room/10/temp  23

As you can see /pwm/fan1/speed hasn't been received by subscribe thread, since we didn't subscribe to it.

Content:

  • psmqd broker, relays messages between clients.
  • psmq_sub listens to specified topics, can be used as logger for communication (optional).
  • psmq_pub publishes messages directly from shell. Can send binary data, but requires pipes, so on nuttx it can only send ASCII.
  • libpsmq library used to communicate with the broker and send/receive messages.