mqttgo语言 mqttdemo( 二 )


1、docker安装
具体使用方式可以参见该 文档
有关如何配置更高级的流处理概念(例如流连接、扩充工作流等)的指导,请查看 说明书部分 。
有关在 Go 中构建您自己的自定义插件的指导,请查看 公共 API 。
apisix和controller如何通信为什么突然又绕到了apisix,其实是因为调研nginx-ingress就很容易联想到是不是要替换为其他网关ingress实现,比如apisix-ingress , 进而想到的肯定是apisix;
这些概念到底有什么区别?
apisix 和 apisix-ingress-controller:apisix是一套体系,apisix-ingress-controller是k8s环境下基于go语言开发的一套自定义CRD,他负责响应apisix自定义资源的创建,监听k8s服务资源的创建变更 , 同步到apisix网关,apisix网关本身由openresty、nginx组成 , 主要是由Lua语言在nginx执行的各个阶段插入钩子 , 实现动态化,且基于etcd+灵活的插件机制,让变更更灵活且立即生效;
nginx-ingress和apisix-ingress-controller: nginx-ingress是k8s体系中目前使用最广的路由网关,比如阿里默认的控制台ingress创建就是使用的它;他集合了nginx+nginx-ingress-controller,拉代码可以看出,nginx-ingress-controller完成了与k8sapiserver交互,获取最新的服务配置变更 , 生成最新nginx配置,除此之外的通讯机制是通过Httppost请求将变更通知到到luanginx侧,ngx.timer在balancer中通过定时器进行动态化
apisix-ingress-controller监控k8s服务变更、自定义CRD及资源创建、将配置同步到apisix;网络请求通过apisix网关作为入口,通过apisix-ingress-controller同步k8s的上游变更
apisix比其他的有啥好?插件灵活 , 功能多,周边
C语言操作yaml配置文件通用操作工具在go语言中使用viper之类的库很方便的处理yaml配置文件 , 但是在c语言中就比较麻烦,经过一番思索和借助强大的github,发现了一个libyaml c库,但是网上的例子都比较麻烦 , 而且比较繁琐,就想法作了一个相对比较容易配置的解析应用,可以简单地类似viper 的模式进行配置实现不同的配置文件读取 。如你的配置文件很复杂请按格式修改KeyValue 全局变量,欢迎大家一起完善
库请自行下载 GitHub - yaml/libyaml: Canonical source repository for LibYAML
直接上代码
yaml示例文件
%YAML 1.1
---
mqtt:
subtopic: "Control/#"
pubtopic: "bbt"
qos: 1
serveraddress: "tcp://192.168.0.25:1883"
clientid: "kvm_test"
writelog: false
writetodisk: false
outputfile: "./receivedMessages.txt"
hearttime: 30
#ifndef __CONFIG_H__
#define __CONFIG_H__
#ifdef __cplusplus
extern "C" {
#endif
/************************/
/* Minimum YAML version */
/************************/
#define YAML_VERSION_MAJOR 1
#define YAML_VERSION_MINOR 1
#define STRUCT_TYPE_NAME 100
#define INT_TYPE_NAME 101
#define STRING_TYPE_NAME 102
#define BOOL_TYPE_NAME 103
#define FLOAT_TYPE_NAME 104
#define MAP_TYPE_NAME 105
#define LIST_TYPE_NAME 106
typedef struct{
char *key;
void *value;
int valuetype;
char *parent;
}KeyValue,*pKeyValue;
#ifdef __cplusplus
}
#endif
#endif
#include
#include
#include
#include
#include
#include
#include
#include "config.h"
typedef struct {
char *SUBTOPIC; //string `yaml:"subtopic" mapstructure:"subtopic"` //"topic1"
char *PUBTOPIC; //string `yaml:"pubtopic" mapstructure:"pubtopic"`
int QOS; //byte `yaml:"qos" mapstructure:"qos"` //1
char *SERVERADDRESS; //string `yaml:"serveraddress" mapstructure:"serveraddress"` //= "tcp://mosquitto:1883"

推荐阅读