dubbo + zookeeper 简介和配备

1.6    营造参数和实时数据实例类

新建四个类:MyDeviceParameter和MyDeviceRTDataMyDeviceParameter继承SCL.Device.DeviceParameter类,用于保存备参数,可以在此类中加进新的设备参数。

          
MyDeviceRTData继承SCL.Device.DeviceReal提姆eData类,用于保存设备的实时数据,可以根据电视发布协议自定义设备的实时数据。

     
那多少个类继承基类后会自动延续SaveSerialize和GetSerialize多个泛型函数,SaveSerialize函数是把当前目标系列化成XML,GetSerialize是把体系化的XML反向变化对象实例。

         
SCL.Device.DeviceParameter类和SCL.Device.DeviceReal提姆eData类是持续自SerializeOperation类,他们的接口是IserializeOperation,SerializeOperation只是一个简易的序列化XML操作类库。

    
倘诺开发者想全盘自定义一个多少持久文件,那么可以持续IserializeOperation接口,重写相应的接口函数,自定义存储数据的章程。

 

Dubbo 注册中央:

对于服务提供方,它要求揭发服务,而且由于选用系统的复杂,服务的数目、类型也不止膨胀; 
对于服务消费方,它最关心怎样收获到它所需求的劳动,而面对纷纷的应用种类,需求管住大批量的劳务调用。 
再就是,对于服务提供方和劳动消费方来说,他们还有可能拥有那二种角色,即既必要提供服务,有须要开销服务。

通过将劳动统一保管起来,可以有效地优化内部选取对劳务发表/使用的流水线和管制。服务注册宗旨可以因而一定商事来成功劳动对外的联合。

Dubbo提供的注册中央有如下几连串型可供选拔

  • Multicast注册中央
  • Zookeeper 注册中央
  • Redis注册中央
  • Simple注册大旨

优点:

  1. 透明化的远程方法调用 
    • 像调用本地方法一致调用长途方法;只需不难布置,没有其他API侵入。
  2. 软负载均衡及容错机制 
    • 可在内网替代nginx lvs等硬件负载均衡器。
  3. 劳务注册中央自动注册 & 配置管理 
    -不需求写死服务提供者地址,注册主题依据接口名机关查询提供者ip。 
    应用类似zookeeper等分布式协调服务作为劳动注册中央,可以将大举门类配置移入zookeeper集群。
  4. 服务接口监控与治理 
    -Dubbo-admin与Dubbo-monitor提供了周到的劳务接口管理与监控功能,针对分裂应用的不比接口,可以开展
    多版本,多协议,多注册中央管理。

 以上部分来自参考地址, 其实, 和某单位培训视频之中讲的, 几乎. 

1.3.1    发送读实时数据命令协议

计算机发送0x61限令为读实时数据命令,共发送6个字节,校验和为从“从机地址”开首的增进和,不包罗“数据报头”、“校验和”和“协议截止”。

出殡指令数据帧如下:

图片 1

  

Dubbo架构:

主页地址: http://dubbo.io/

 图片 2

 

Provider: 揭发服务的服务提供方。 
Consumer: 调用长途服务的劳动消费方。 
Registry: 服务登记与发现的登记中央。 
Monitor: 计算服务的调用次数和调用时间的监督中央。

调用流程 

0.劳动容器负责启动,加载,运行服务提供者。 
1.劳动提供者在启动时,向登记中央注册自己提供的劳务。 
2.劳务消费者在启动时,向注册焦点订阅自己所需的劳动。 
3.挂号中央再次回到服务提供者地址列表给消费者,如果有改观,注册中央将按照长连接推送变更数据给买主。 
4.劳务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,要是调用战败,再选另一台调用。 
5.劳动消费者和提供者,在内存中一起调用次数和调用时间,定时每分钟发(英文名:zhōng fā)送三遍计算数据到监督焦点

 

1.8    设备调试

Dubbo简介:  

  Dubbo 是Alibaba集团开源(此前不开源)的一个高品质出色的劳动框架,
使得应用可透过高品质的 RPC 完成劳务的输入和出口作用,
可以和spring框架无缝集成.

  那么那里, 啥是RPC啊?

  这么来说呢, 业务逻辑层和显现层不在同一台电脑上, 甚至不在同一个都市,
当我表现层想调用逻辑层的事物, 怎么调? RPC 就是为着化解这几个标题标.
你说将逻辑层做成了接口, 通过http调用接口的方法, 确实能够调用得到,
不过速度和性质没有 RPC 高.

度娘解释: 

  RPC (Remote Procedure Call) –
远程进程调用. 它是一种通过网络从远程总结机程序上呼吁服务,而不需求明白底层互连网技术的商事。RPC协议只要某些传输协议的留存,如TCP或UDP,为通讯程序之间指点消息数量。在OSI网络通讯模型中,RPC跨越了传输层应用层。RPC使得开发包蕴网络分布式多程序在内的应用程序越发便于。

  看的或是有点云里雾里, 不过没关系, 总的, 可以将RPC了解为,
将业务层的某些方法, 做成了接口, 变成服务端, 供客户端去调用. 

SuperIO相关材料下载:http://pan.baidu.com/s/1pJ7lZWf

zookeeper(注册焦点) 下载和布局

下载地址: http://mirrors.hust.edu.cn/apache/zookeeper/

本身这边下载的是 linux 版本的. 所以也会布置到linux上去,
linux系统用的centos.

  1. 获得下载的文本, 进行解压缩到先行建好的 /usr/java 文件中 (mkdir
    /usr/java)

    tar -zxvf zookeeper-3.4.11 -C /usr/java

 2. 新建data文件夹

cd /usr/java/zookeeper-3.4.11
mkdir data
  1. 修改配置文件 zoo_sample.cfg

    cd conf
    cp zoo_sample.cfg zoo.cfg
    vim zoo.cfg

图片 3

将dataDir修改为事前新建的data文件夹

 4. 启动zookeeper

cd ../bin
./zkServer.sh start

 

1.7.4    高级应用

1)         void RunIODevice (SCL.CommunicateController.IDeviceIO io)

可以重写这些函数,在此处改变设备运转的流程,根据CommunicationType属性指定的报道类型,可以把io参数转换为网络通信接口ISocket或串口通信接口ICOM,之后方可有指向的对殡葬操作和吸收操作举办二次开发。一般不提出重写这些函数。

 

2)         void Send(SCL.CommunicateController.IDeviceIO io, byte[]
sendbytes)

可以重写那些函数,根据CommunicationType属性指定的简报类型,可以把io参数转换为网络通信接口ISocket或串口通讯接口ICOM,举办发送数据操作。在不重写RunDevice函数的状态下,在适龄的使用场景可以重写那些函数。

 

3)         byte[] Receive(SCL.CommunicateController.IDeviceIO io)

可以重写那些函数,根据CommunicationType属性指定的简报类型,可以把io参数转换为互联网通信接口ISocket或串口通信接口ICOM,举办接收数据操作。在不重写RunDevice函数的景况下,在适度的利用场景可以重写这几个函数。

 

4)         void SaveBytes(byte[] data, string desc)

可以重写这些函数,对发送的数量和接收的数目进行自定义保存。默许保存在”d:软件平台
原始数据”目录下。

 

5)         void SocketConnect(string ip, int port)

可以重写这么些函数,当网络通信的时候,有客户端连接到软件平台会调用这些函数接口。

 

6)         void SocketDisconnect(string ip, int port)

可以重写这几个函数,当网络通信的时候,有客户端与软件平台断开会调用那么些函数接口。

注册服务监督

  1. 下载地址

https://github.com/alibaba/dubbo

将品种下载下来以后, 打开其中的target文件夹, 上面有一个早已编译好的war包

图片 4

将此war包拷贝到linux系统中的tomcat webapps文件夹下, 且重命名为
dubbo-admin. 

  1. 做客监控页面

假设是在linux 系统中平昔访问, 则输入以下地方:

   http://localhost:8080/dubbo-admin/

一经是在其余电脑中做客, 则输入替换地址为linux系统的ip地址即可.

 在进入的时候, 会需求输入账号和密码, 默许都是 root

图片 5

 

参考:

  dubbo入门

 

1.7.3    事件作证

以下设备事件都是在原本事件的底子上开展包装的函数,开发者可以直

接调用以下触发事件的函数,软件平台在起步的时候曾经默许加载了那个事件。

1)         void OnReceiveDataHandler(byte[] revdata);

接触接收数据事件

 

2)         void OnSendDataHandler(byte[] senddata);

接触发送数据事件,当网络通信的时候,应用Self方式的时候,可以通过这几个事件自主发送数据。

 

3)         void OnDeviceRuningLogHandler(string statetext);

把装备运行日志输出到运行监视器

 

4)         void OnUpdateContainerHandler();

接触更新运行监视器事件

 

5)         void OnCOMParameterExchangeHandler(int oldcom, int oldbaud,
int newcom, int newbaud);

串口改变事件。

 

6)         void OnDeviceObjectChangeHandler(object obj);

目的数据变动事件,用于驱动呈现、导出、服务等模块。

 

7)         void OnDeleteDeviceHandler();

删去设备事件

框架演化:

  1. 单纯性应用框架(ORM) 
    当网站流量很小时,只需一个运用,将兼具成效如下单支付等都安插在一起,以缩减计划节点和本钱。 
    缺点:单一的系列架构,使得在支付进度中,占用的资源更是多,而且随着流量的充实尤其难以保险 
    图片 6

  2. 笔直应用框架(MVC) 
    垂直应用架构解决了单一应用架构所面临的扩容难题,流量可以分流到各类子系统当中,且系统的体积可控,一定水准上跌落了开发人员之间联合以及维护的老本,提高了支付功效。 
    缺点:但是在笔直架构中相同逻辑代码须要不停的复制,无法复用。 
    图片 7

  3. 分布式应用架构(RPC) 
    当垂直应用更多,应用之间相互不可避免,将挑寿春工作抽取出来,作为单身的劳务,逐步形成平稳的劳动主题 
    图片 8

  4. 横流计算架构(SOA) 
    随着服务化的更加升华,服务越多,服务中间的调用和看重关系也愈来愈复杂,这时候,
    就需求一个利用来治理这几个扑朔迷离的关联,
    从而诞生了面向服务的架构种类(SOA),也就此衍生出了一多级相应的技术,如对劳务提供、服务调用、连接处理、通讯协议、种类化格局、服务意识、服务路由、日志输出等表现展开打包的劳务框架

从上述是电商系统的演变可以看出架构衍生和变化的长河: 
图片 9

  • 纯净应用架构

    • 当网站流量很时辰,只需一个应用,将具有机能都安顿在协同,以调减安顿节点和资本。
    • 此刻,用于简化增删改查工作量的 数据访问框架(ORM) 是重点。
  • 笔直应用架构

    • 当访问量渐渐增大,单一应用扩张机械带来的加速度更是小,将使用拆成互不相干的多少个使用,以提高功效。
    • 那儿,用于加速前端页面开发的 Web框架(MVC) 是主要。
  • 分布式服务架构 

    • 当垂直应用更多,应用之间相互不可防止,将主导业务抽取出来,作为独立的劳务,逐步形成平安的劳动为主,使前端采纳能更敏捷的响应多变的市场须求。
    • 此时,用于提升业务复用及组成的 分布式服务框架(RPC) 是主要。
  • 流动统计架构 
    • 当服务更多,容量的评估,小服务资源的浪费等难点日趋显现,此时需增添一个调度主题依照访问压力实时管理集群容量,升高集群利用率。
    • 那儿,用于抓好机器利用率的 资源调度和治理为主(SOA) 是首要。

 

 

1.5    创设协商驱动

    新建多少个类:MySendProtocol
和MyReceiveProtocol,MySendProtocol继承SCL.Device.DeviceSendProtocol基类,MyReceiveProtocol类继承SCL.Device.DeviceReceiveProtocol。

      MySendProtocol
和MyReceiveProtocol五个类都重写(override)“Function61”函数,MySendProtocol类中的Function61函数完结打包发送命令操作,MyReceiveProtocol类中的Function61函数已毕解析数据操作,FunctionXX在几个类中都会成对出现,重借使为了好记。

    
在MySendProtocol实例中得以调用DriverFunction函数,传入相应的命令,例如:0x61。会自行调用“Function61”函数,作为调用相应命令函数的驱动接口。GetSendCmdBytes函数接口是在DriverFunction函数基础上包裹的,同样也足以拔取,可是要把“isbox“设置成false,否则会对殡葬的数据做特殊的处理。

  
在MyReceiveProtocol实例中得以调用DriverFunction函数,传入相应的吩咐,例如:0x61。会自行调用“Function61”函数,作为调用相应命令函数的驱动接口。GetAnalysisData函数是在DriverFunction函数基础上包裹的,同样可以利用,只是多调用了一层GetCommand函数接口。

    具体代码请参见:DeviceDemo项目。

1.2    项目配制

1)目的框架采用Framework4.0

图片 10

2)生成的靶子平台应用x86

图片 11

所有事例程序的靶子平台运用x86。主要考虑到32位操作系统与64操作系统的包容性。

1.7    创设设备驱动

     
“营造协商驱动”和“营造参数和实时数据实例类”两节都是为创设运行设备做的最初准备,将用作运行设备的习性。

      新建一个装备类:MyDevice,它三番一次自SCL.Device.RunSCLDevice1。

开发者注意到还有一个SCL.Device.RunSCLDevice类,它是比较早的周转设备类,考虑的平台的包容性,现在还在继承使用,然则新开发的设备模型不建议接纳SCL.Device.RunSCLDevice类。

它们都是三番一遍自IRunSCLDevice接口。

1.9    挂载设备模块

在“工业串口和网络软件通信平台_SuperIO”目录下找到【ConfigTool.exe】应用程序,选用【设备配备】选卡,单击【挂载设备】按钮,把刚刚付出的配备驱动模块挂载到平台下。如下图:

图片 12

1.10    在凉台下运行设备

    
把设备驱动挂载好之后,运行“工业串口和网络软件通信平台_SuperIO”目录下的【SuperIO_Run.exe】应用程序,选拔【用户管理】->【用户登陆】菜单,选择【工程师】或【管理员】用户,输入默认的密码:123。

登陆到软件平台后,采用【设备管理】->【增添设备】菜单,选择刚刚挂载的设备驱动模块。如下图:

图片 13

付出的好的装备驱动模块同时帮助COM(串品)和TCP(互连网)二种简报方式,TCP(互联网)通信时帮忙Client和Server三种工作形式。

 

作者QQ:504547114

交流QQ群:54256083

1.1    开发准备

把“开发包”内的装有文件复制到项目标“bin”目录下,或项目下的专用生成目录。开发包文件蕴涵如下图:

图片 14

  SuperIO.dll是软件平台的为主模块,
SuperIO目录是软件平台的参数配制、数据存储的目录。

1.4    新建设施模块

如下图:

图片 15

增加对SuperIO.dll的引用,如下图:

图片 16

    项目标配制请参见:1.2门类配制。

1.7.1    常用接口

1)         public override SCL.ProtocolDriver.ISendProtocol SendProtocol

把写好的出殡协议类实例化之后,在此再次来到。例如:MySendProtocol类。

 

2)         public override SCL.ProtocolDriver.IReceiveProtocol
ReceiveProtocol

把写好的收纳协议类实例化之后,在此重回。例如:MyReceiveProtocol类。

 

3)         public override SCL.Device.IDeviceParameter DeviceParameter

把写好的装置参数类实例化之后,在此重临。例如:MyDeviceParameter类。

 

4)         public override SCL.Device.IDeviceRealTimeData
DeviceRealTimeData

把写好的实时数据类实例化之后,在此重回。例如:MyDeviceRTData类。

 

5)         public override void InitDevice(int devid)

开首化设备,可以在此地对发送协议、接收协议、设备参数和实时数据等新闻举办伊始化。

 

6)         public override byte[] GetRealTimeCommand()

以此类是回去读实时数据命令,当CommandCache命令缓冲区中有可发送命令的时候,优先读、发送取命令缓冲区中的命令数据;假设CommandCache命令缓冲区没有数量的时候,软件平台会自动调用GetReal提姆eCommand函数接口,重返读实时数据命令,举行发送。

 

7)         public override void DealData(byte[] data)

当报导正常时,软件平台会把收到到的数码自动传入到那个函数,能够调用ReceiveProtocol属性进行分析数据以及处理、分析、保存。通信正常与否和吸收协议类中CheckData函数接口有关。

 

8)         public override void UnRegDevice()

当软件平台没有登记的时候,软件平台会调用那些函数。

 

9)         public override void UnknownIO()

当报道链路为null的时候,软件平台会调用这些函数。例如:串口未打开、互联网没有连接等。

 

10)     public override void CommunicateChanged(SCL.Device.IOState
ioState)

当报纸公布状态发送改变的时候,软件平台会调用这一个函数。通信状态包含:通信正常、通信中断和通信干扰。

 

11)     public override void CommunicateError()

当广播发布困扰的时候,软件平台会调用这么些函数。通信正常与否和接到协议类中CheckData函数接口有关。

 

12)     public override void CommunicateInterrupt()

当报导中断的时候,软件平台会调用那么些函数。通信正常与否和接受协议类中CheckData函数接口有关。

 

13)     public override void CommunicateNone()

当未知通信状态的时候,软件平台会调用这几个函数。一般情状下不会并发此类意况。

 

14)     public override void SaveData()

对拍卖的多寡举行保存。

 

15)     public override void Alert()

判断数据是还是不是丰富,如果出现非常数据,在进展报警处理。

 

16)     public override void ShowData()

展现数据处理,用于更新配备运行器,以及自定义UI和导出数据。

 

17)     public override void DeviceTimer()

每个设备会分配一个定时器,默许1分钟调用三次这些函数。可以通信IsStart提姆er属性启动、为止定时器,通过提姆erInterval属性设置定时器执行间隔。

 

18)     public override SCL.Device.DeviceType DeviceType

回来设备项目,设备档次包罗:普通设备、虚拟设备以及其余。

 

19)     public override s y s t e m.Windows.Forms.Control DeviceGraphics

重临设备图形化界面。

 

20)     public override void ShowContextMenu()

呈现上下文菜单函数。

 

21)     public override string ModelNumber

回到设备模块编号,也就是设备的型号,那些号码尽量要求不可以再度。

 

24)public void ShowMonitorIODialog();

来得通道监视器窗口

 

25)public void ShowMonitorIOData(byte[] data, string desc);

向运行监视器中呈现数据新闻

1.3    假定通信协议

1.3.3    发送和接收数据事例

出殡(十六进制):0x55 0xaa 0x00 0x61 0x61 0x0d

接到(十六进制):0x55 0xaa 0x00 0x61 0x43 0x7a 0x00 0x00 0x43 0xb4 0x15
0x0d

流量数据为:250.00

信号数据为:360.00

1.7.2    属性表达

     下边是装备拥有的性质,请参见。

1)         UserLevel

用户级别属性,包涵:未知用户、普通用户、低级用户和高级用户等七个级别。

 

2)         IsStartTimer

赢得或安装是还是不是打开当前装备的时钟,默许不打开。

 

3)         TimerInterval

得到或设置当前配备时钟的间隔时间,默许为1秒。

 

4)         IsRegLicense

赢得或配备当前设备是不是被登记,默许不挂号。

 

5)         RunDevicePriority

得到或设置当前设施运转级别,分为:普通和先期。假如为先行级别,则先调用该进行发送和接收数据。

 

6)         CommunicationType

取得或安装当前设备的报纸公布类型。包涵:串口和互连网三种。

 

7)         CommandCache

赢得或设置当前设备命令缓冲,如果有要发送的数目,则优先调用命令缓冲的数码开展发送。

 

8)         IsRunDevice

获得或安装是或不是运行当前配备,如若设置false,当前设置不加入运行(发送和接收数据)。

 

9)         DeviceParameter.IsSaveOriginBytes

标识是或不是保存原有发送和吸纳的字节数据,如果保留,默许保存路径在D盘。

 

10)      object Tag

临时标记属性。

 

11)      object SyncLock

同步锁对象

1.3.2    解析实时数据协议

   
下位机接收到读实时数据命令后,并校验成功,再次来到实时数据,校验和为从“从机地址”开端的增进和,不包含“数据报头”、“校验和”和“协议截止”。

收取数据帧如下:

图片 17

 

1.8.2    控制台格局调试

控制台测试,没有UI突显界面,部分成效可能测试不全。须求通过

SCL.Device.IdebugDevice debug=
SCL.Device.DebugDevice.GetDebugInstance()得到调试实例。其余代码与“界面方式测试”一样。如下图:

图片 18

1.8.1    界面格局调度

   界面情势测试紧即使营造一个主程序,模拟真实的应用程序对配备开展

测试。推荐应用那种测试方法。

1)  引用组件

关键引用DeviceDemo程序集。如下图:

 图片 19

测试设施

界面方式测试是有窗体界面的,必须继续“SCL.UI
.MainForm”类,并用代码把软件平台设置成调试格局“SuperIO.Device.DebugDevice.IsDebug
= true;”,如图:

 图片 20

在Form_Load中开首化实例,并且加载调试设备模块,重即使开创设备实例、早先化参数、进行设施调试,如:this.DebugDevice((IRunDevice)_myDevice)语句。如下图:

图片 21

3)IO监测器,突显发送和接纳的原来十六进制数据,便于调试。如下图:

图片 22

4)用VirtualSerialPortDriver在本机虚拟出来八个串口,多个串口完成了虚拟连接,例如:COM1和COM2;打开串口助手软件和平台软件(SuperIO平台),分别安装COM1和COM2,根据“1.3比方通信协议”发送和接收数据。相关软件在“协理工具”目录里有。如下图:

图片 23

切实测试代码,请参见:FormTest项目。

官方网址:http://www.bmpj.net

源小说地址:http://www.bmpj.net/index.php?m=article&f=view&id=4

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注