Nanomq Nanomq Versions Save

An ultra-lightweight and blazing-fast Messaging broker/bus for IoT edge & SDV

0.21.9

3 weeks ago

This is a pre-release for fixing some minor bugs. They are hard to hit but essential to fix.

What's Changed in NanoMQ

New Contributors

Full Changelog: https://github.com/nanomq/nanomq/compare/0.21.8...0.21.9

What's Changed in NanoNNG

Full Changelog: https://github.com/nanomq/NanoNNG/compare/0.21.8...0.21.9

0.21.8

1 month ago

This is a stable release of 0.21

  1. Fix session keeping feature. (clean start = false will not cause FD exhaustion)
  2. Fix several minor bugs in the newly added MQTT Stream

What's Changed in NanoMQ

Full Changelog: https://github.com/nanomq/nanomq/compare/0.21.6...0.21.8

What's Changed in NanoNNG

Full Changelog: https://github.com/nanomq/NanoNNG/compare/0.21.6...0.21.8

0.21.7

1 month ago

What's Changed

Full Changelog: https://github.com/nanomq/nanomq/compare/0.21.6...0.21.7

0.21.6

2 months ago

This is a bug-fix version especially for refactored MQTT QUIC Bridging Please be cautious when trying this new toy! If you want a stable QUIC bridging. PLease turn to 0.19.6 tag/branch

What's Changed

Full Changelog: https://github.com/nanomq/nanomq/compare/0.21.5...0.21.6

0.21.5

2 months ago

This is a Bug-Fix release. Fix minor bugs of new QUIC MQTT SDK, HTTP WebServer, MQTTV5 decoding and add a new config param : exchange URL of MQTT Stream Especially for people who is using MQTT TLS feature (broker side), There is an important fix regarding socket close issue in transport layer. Plz update it to avoid FD exhaustion.

What's Changed

Full Changelog: https://github.com/nanomq/nanomq/compare/0.21.2...0.21.5

0.21.2

3 months ago

This is a minor release to update doc, upgrade log system and fix a config reading error

  1. now nanomq will detect the folder and create it by it self if there is none
  2. NanoMQ will automatically touch a new file if log file is missing
  3. Fix the backoff multiplier of keepalive interval in hocon conf. (previous is 1000 times larger)

What's Changed in nanomq

What's Changed in nanonng

0.21.1

3 months ago

NanoMQ 0.21.1 is a republish of 0.21.0 in order to bring some important fixes such as : https://github.com/nanomq/nanomq/issues/1632

This Major release has two big new features: MQTT Stream and a New Plugin system along with multiple important fixes and minor new features.

  1. Read bridging backoff time from the conf file.
  2. Add rpath support, allow users to specify their own so file to link
  3. Fix Bridging aio overflow while using HTTP Publish API with bridging
  4. Add a dependency checker for DDS Proxy to ensure both sides using the same ver of CycloneDDS
  5. Fix a stack overflow bug caused by compiler optimization
  6. Expose TCP level option for MQTT TCP bridging
  7. Add a new Plugin system. It allows the user to set a self-defined user property.
  8. Add a new conf option to disable/enable MQTT TCP listener
  9. Fix a potential decoding bug of a large CONNECT Packet
  10. Sync NNG with Upstream to fix the duplicated ClientID issue.
  11. Add a brand new Messaging Queue feature: MQTT Stream, which automatically partitions MQTT msgs to disk. Allows consuming msg via NNG Req/Rep Sock.

MQTT STREAM

A basic version of MQ : MQTT STREAM has been released, and its main ability is to persist the content of mqtt messages, for consumer to retrieve msgs by key.

Configuration

First we introduce three data structures for MQTT STREAM.

  • exchange_server/exchange/ringbus

The specific reference configuration is as follows.

exchange_client.mq1 {
	# # exchanges contains multiple MQ exchanger
	exchange {
		# # MQTT Topic for filtering messages and saving to queue
		topic = "exchange/topic1",
		# # MQ name
		name = "exchange_no1",
		# # MQ category. Only support Ringbus for now
		ringbus = {
			# # ring buffer name
			name = "ringbus",
			# # max length of ring buffer (msg count)
			cap = 1000
			fullOp = 3
		}
	}
}

Notice:

  • The topic indicates which topic you want to put data in ringbus.
  • Where fullOp is a key attribute and represents the operation when the ringbus is full.
    • 0: RB_FULL_NONE: When the ringbus is full, no action is taken and the message enqueue fail
    • 1: RB_FULL_DROP: When the ringbus is full, the data in the ringbus is discarded
    • 2: RB_FULL_RETURN: When the ringbus is full, the data in the ringbus is taken out and returned to the aio
    • 3: RB_FULL_FILE: When the ringbus is full, the data in the ringbus is written to the file

For example, when the ringbus is full and you want to store the data to a file, you should use fullOp=3

Messages in ringbus

Messages in ringbus are stored in the form of key/value, and currently the key is calculated using hash(clientid+topic+id).

How to query messages

If you want to query messages stored in a file, there's an interface, as well as a consumer demo.

  • First compile exchange_consumer. You can find the source code at
./nng/demo/exchange_consumer/exchange_consumer.c
  • Use exchange_consumer
  1. dump the msg data of all files.
./demo/exchange_consumer/exchange_consumer "dumpfile"
  1. dump the msg data from the file according to the key.
./demo/exchange_consumer/exchange_consumer "dumpkey:4862831023852633869"
  1. dump the msg data from the file according to the keys.
./demo/exchange_consumer/exchange_consumer "dumpkeys:2062146488009373518,2625100014974548622"

What's Changed in NanoMQ

New Contributors

Full Changelog: https://github.com/nanomq/nanomq/compare/0.20.8...0.21

What's Changed in NanoNNG

New Contributors

0.21

3 months ago

NanoMQ 0.21 is ready! This Major release has two big new features: MQTT Stream and a New Plugin system along with multiple important fixes and minor new features.

  1. Read bridging backoff time from the conf file.
  2. Add rpath support, allow users to specify their own so file to link
  3. Fix Bridging aio overflow while using HTTP Publish API with bridging
  4. Add a dependency checker for DDS Proxy to ensure both sides using the same ver of CycloneDDS
  5. Fix a stack overflow bug caused by compiler optimization
  6. Expose TCP level option for MQTT TCP bridging
  7. Add a new Plugin system. It allows the user to set a self-defined user property.
  8. Add a new conf option to disable/enable MQTT TCP listener
  9. Fix a potential decoding bug of a large CONNECT Packet
  10. Sync NNG with Upstream to fix the duplicated ClientID issue.
  11. Add a brand new Messaging Queue feature: MQTT Stream, which automatically partitions MQTT msgs to disk. Allows consuming msg via NNG Req/Rep Sock.

MQTT STREAM

A basic version of MQ : MQTT STREAM has been released, and its main ability is to persist the content of mqtt messages, for consumer to retrieve msgs by key.

Configuration

First we introduce three data structures for MQTT STREAM.

  • exchange_server/exchange/ringbus

The specific reference configuration is as follows.

exchange_client.mq1 {
	# # exchanges contains multiple MQ exchanger
	exchange {
		# # MQTT Topic for filtering messages and saving to queue
		topic = "exchange/topic1",
		# # MQ name
		name = "exchange_no1",
		# # MQ category. Only support Ringbus for now
		ringbus = {
			# # ring buffer name
			name = "ringbus",
			# # max length of ring buffer (msg count)
			cap = 1000
			fullOp = 3
		}
	}
}

Notice:

  • The topic indicates which topic you want to put data in ringbus.
  • Where fullOp is a key attribute and represents the operation when the ringbus is full.
    • 0: RB_FULL_NONE: When the ringbus is full, no action is taken and the message enqueue fail
    • 1: RB_FULL_DROP: When the ringbus is full, the data in the ringbus is discarded
    • 2: RB_FULL_RETURN: When the ringbus is full, the data in the ringbus is taken out and returned to the aio
    • 3: RB_FULL_FILE: When the ringbus is full, the data in the ringbus is written to the file

For example, when the ringbus is full and you want to store the data to a file, you should use fullOp=3

Messages in ringbus

Messages in ringbus are stored in the form of key/value, and currently the key is calculated using hash(clientid+topic+id).

How to query messages

If you want to query messages stored in a file, there's an interface, as well as a consumer demo.

  • First compile exchange_consumer. You can find the source code at
./nng/demo/exchange_consumer/exchange_consumer.c
  • Use exchange_consumer
  1. dump the msg data of all files.
./demo/exchange_consumer/exchange_consumer "dumpfile"
  1. dump the msg data from the file according to the key.
./demo/exchange_consumer/exchange_consumer "dumpkey:4862831023852633869"
  1. dump the msg data from the file according to the keys.
./demo/exchange_consumer/exchange_consumer "dumpkeys:2062146488009373518,2625100014974548622"

What's Changed in NanoMQ

New Contributors

Full Changelog: https://github.com/nanomq/nanomq/compare/0.20.8...0.21

What's Changed in NanoNNG

New Contributors

0.20.8

5 months ago

This is a major fix version for QUIC Multi-Stream. Along with some minor fix for SDK & QoS Msg mechanism of bridging. Also add NFTP file-transferring feature.

What's Changed

New Contributors

Full Changelog: https://github.com/emqx/nanomq/compare/0.20.6...0.20.8

What's Changed in NanoNNG

Full Changelog: https://github.com/nanomq/NanoNNG/compare/0.20.5...0.20.8

0.19.6-Beta

6 months ago

A customized release