自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 python 时间处理

python 时间处理常用方法

2023-01-28 16:17:21 166

原创 音频分析框架pyAudioAnalysis文档

音频分析框架pyAudioAnalysis文档翻译

2023-01-28 16:13:28 960

原创 关于scrum的一点思考

scrum培训学习感悟

2023-01-28 16:07:18 164

原创 edgex进阶系列-5.与规则引擎eKuiper联动(图拓扑规则)

LF Edge eKuiper 是 Golang 实现的轻量级物联网边缘分析、流式处理开源软件,可以运行在各类资源受限的边缘设备上。eKuiper是一个规则引擎,即按一定的规则去处理数据。eKuiper灵活地解决了:从哪里取数,进行什么处理,处理完发到哪去 这些问题。eKuiper虽然不是edgex的一部分,但与edgex做了比较深的集成。关于eKuiper的基本使用,可以参考官方文档:https://ekuiper.org/docs/zh/latest/ 进行实现。本文仅专注于。

2022-10-20 16:20:21 891

原创 区块链基础问答

区块链的原理和机制。

2022-09-13 17:33:40 3262 1

原创 edgex进阶系列-4.自定义应用服务(python)

4 自定义应用服务(python)很多时候,我们不能基于go去开发与edgex整合或联动的application service。比如需要调用算法模型对数据进行计算,那用python编写application service更合适些。这样便不能使用edgex SDK提供的messagebus了。好在edgex默认使用了redis pipeline作为消息通道。我们可以直接连接redis,从redis中取出event进行处理。从pipeline接收数据接收数据比较简单,连接上redis后,开启一个订

2022-05-31 15:42:32 906

原创 edgex进阶系列-3.自定义应用服务(go)

3 自定义应用服务(go)edgex没有提供官方的application service,因为每个用户对数据的应用场景都是不同的。因此提供了一些demo工程,放在了edgex-examples内。比较典型的是cloud-export-mqtt这个示例。它完成了对数据格式的转换,并通过MQTT协议发送到云端。消息处理总线(edgex messagebus)在application service启动时,可以通过service.SetFunctionsPipeline方法构建一个消息总线,然后在总线内,

2022-05-31 15:41:02 1021

原创 edgex进阶系列-2.自定义设备服务

2 自定义设备服务edgex只提供了一部分的设备协议的适配,包括:device-camera、device-snmp、device-mqtt、device-modbus、device-gpio、device-coap、device-uart、device-grove。那实际使用中一定会需要适配其他协议,如接入纯TCP协议的设备,或者对原有协议进行改造,比如非标准modbus的设备。在写新的device-service的时候,通常不需要创建空白的新工程,就拿现有的工程,如device-modbus-go

2022-05-31 15:38:54 3378 5

原创 edgex进阶系列-1.通用能力

1 通用能力edgex的SDK和代码框架中,提供了一些基础能力,如从配置文件读取配置,使用service client调用其他服务,构建消息pipeline等。配置读取edgex的配置文件使用toml的格式通常放在和main.go同级的res包下面可以通过目录来分割不同的profile或者运行环境。在启动时可以用 -p xxx来激活不同的配置文件。自定义配置项可以在配置文件中以toml的格式加入自己的配置项,并在系统启动时,通过service.LoadCustomConfig方法加载

2022-05-31 15:37:25 673

原创 edgex进阶系列-0.概述

0 概述本节类似图书里的前言,旨在说明这一系列文章的写作目的、目标读者等内容。写作目的本系列的主要目的是总结近期对edgex的学习和探索,谢谢在edgex上扩展的思路,希望能帮到同样在使用edgex的同学。注:参考本系列的前提:已经对edgex有所了解,并能够启动edgex的核心组件,如consul、redis、core-metadata、core-data等有一定的go语言基础本人也是刚刚开始使用golang语言,其中不规范的地方请勿参考,也欢迎指出。目录/大纲:通用能力。

2022-05-31 15:35:54 1070

原创 akka入门系列-8. 集群下的单例actor

8. 集群下的单例actor分布式集群保障了服务的高可用,但同时要求actor必须是无状态的,对于有状态的情况,可以把状态放入数据库,但这增加了额外的开销。也可以使用akka提供的单例actor。单例actor,如名字所表示的,是整个集群下的单例。即整个集群只有这1个actor。下面看下怎么创建和使用单实例的actor:初始化单例actorClusterSingleton singleton = ClusterSingleton.get(context.getSystem());// 创建fil

2021-09-28 14:03:23 1133

原创 akka入门系列-7. 工程化

7. 工程化工程化的一项主要内容就是通过暴露REST API来管理ActorSystem内的actor。这里仅提供一种思路。由于我们的服务通常是基于spring boot开发,打成jar包运行在服务器上。因此主要需要解决如何和spring boot整合的问题。在实践过程中,我们发现,创建actor(调用context.spawn()方法)是需要ActorContext信息的,而这个ActorContext是不能被拿到akka环境外使用的。也就是说,不能从service里面直接去调用context.sp

2021-09-28 14:02:40 1228

原创 akka入门系列-6. 集群

6. 集群在前面,我们实现了单实例的AkkaSystem,也实现了actor的并行计算。现在我们做成分布式的/集群化的AkkaSystem。以实现最终的目标。相关概念在实现集群前,先介绍几个概念。node:集群的成员,分布式系统中的节点seed nodes:种子节点(列表),从命名可以看出,是集群产生的源头,但不是集群的全部,也就是说我们不需要把集群全部节点的地址放入种子节点列表。并且,在运行过程中,种子列表的配置对集群没有任何影响。集群搭建从单节点改造成集群,主要通过修改配置文件完成,配

2021-09-28 14:01:57 1860

原创 akka入门系列-5. 路由消息

5. 路由消息之前的例子中我们创建和使用的都是单个actor,而一个actor同时只能处理一条消息,这并没有发挥出akka并行计算的优势,我们希望能并行地去处理消息,就像kafka的consumer那样。这就需要使用到akka中的路由了。路由,和常规理解的一样,当消息到达后,可以按一定的策略,把消息分给路由之后的actor处理。在akka中有2类路由,pool路由和group路由。pool路由:从名字看,一堆actor都在一个池子里。group路由:从名字看,一堆actor都属于一个组。那2个

2021-09-28 14:01:09 1072

原创 akka入门系列-4. Actor间的交互与停止

4. Actor间的交互与停止Actor间的交互在实际场景中,我们需要很多类型的actor协助来完成一项任务或功能。这就涉及actor建的交互。actor最基本也是最常用的方式就是actorRef.tell(message)。 这个方法是异步的,akka非阻塞的优势也正是通过这一点体现出来的。注:使用tell()有2个前提,要获取被tell的actor的ActorRef,以及此actor能接收的消息的类型。实际场景中,可能会有其他场景,比如需要返回处理的结果、或者定时给自己发消息,可以参考akk

2021-09-28 13:59:48 1596

原创 akka入门系列-3. Actor进阶:创建带参数的actor和发送复杂的消息类型

3. Actor进阶:创建带参数的actor和发送复杂的消息类型上一篇实现了actor的创建,但是这个actor并不能满足我们生产中的要求。主要有以下2点:构建actor类时,需要带参数或配置消息不会是String这种基本类型,会是一个自定义的类针对上面的问题,我们扩展之前的HelloWorldActor,并引入akka的一些用法或思想。定义带参数的actor构建带参数的actor的方法,可以通过actor类的create()静态方法,传递到私有化的构造方法中,再在构造方法中赋值到actor

2021-09-28 13:59:06 652

原创 akka入门系列-2. Actor基础:创建Actor并发送消息

2. Actor基础:创建Actor并发送消息上面我们启动了ActorSystem,但是什么都没有,现在我们在里面创建一个actor,并给它发送消息。在上一篇的例子里,我们启动ActorSystem后什么也没干,现在改造RootBehavior.create()的逻辑,在里面创建actor。actor需要定义与创建:定义:actor的定义通过一个actor类来定义,在其中编写它对消息的处理逻辑创建:或者叫实例化,通过akka的context加载到ActorSystem中。如下所示:

2021-09-28 13:57:47 936

原创 akka入门系列-1. 基础概念与启动ActorSystem

1. 基础概念与启动ActorSystem基础概念简介akka系统是Actor模型的实现。Actor模型被提出的初衷是解决并行处理的问题。在传统的面向对象模型下,完成一套复杂的逻辑/功能,我们需要创建一些对象,每个对象包含一些方法,然后方法之间调来调去。在这个框架下,通常通过多线程来实现并行计算,这就涉及了线程阻塞的问题,以及资源冲突和锁的问题,让代码的设计和编写变得复杂。那Actor是怎么解决阻塞和锁的问题呢?Actor模型把一套复杂功能拆分成不同的actor,不同的actor能完成不同的逻辑

2021-09-28 13:56:49 792

原创 akka入门系列-0. 概述

0. 概述本节类似图书里的前言,旨在说明这一系列文章的写作目的、目标读者等内容。写作目的本系列写作的最主要目的是用输出倒逼输入,协助自己理清思路,分享是其次的。由于最近的项目里使用到了akka框架,整个过程处于摸索阶段,遇到了不少雷和坑,排雷填坑的过程,阅读了官方文档,也在网上找过资料。发现了一些问题:网上的资料:文章理论太多,并且大部分是来自官方文档的搬运,并且很多文章太旧了,是基于classic版本,而akka最新的typed版本在理念和用法上已经是完全不同的了。官方文档:官方文档是

2021-09-28 13:54:01 2571

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除