Posts

Showing posts from July, 2019

Protocol Buffers 开发者指南

欢迎来到 protocol buffers 的开发者指南。protocol buffers 是一个语言中立,平台中立针对通讯协议,数据存储和其他领域中对结构化数据进行序列化的扩展方法。 本文档主要针对的是 Java,C++ 或 Python 的开发人员希望在开发的应用程序中使用 Protocol Buffers。这个有关 Protocol Buffers 摘要性的介绍将会告诉你如何开始使用 Protocol Buffers。如果你希望更加深入的了解有关 Protocol Buffers 的内容,你可以进入  tutorials  或者  protocol buffer encoding  页面来详细了解。 有关 API 的参考文档,请参考页面: reference documentation  这里提供了所有这 3 种语言的参考,同时也针对 .proto  language  和  style  提供相关的指南。 什么是 Protocol Buffers? Protocol buffers 是对结构化数据序列化的一个灵活,高效,自动化工具 —— 你可以将 Protocol buffers 想象成 XML,但是体积更小,更快也更加简单。 你可以自己定义你的结构化数据,然后你可以使用特定的代码生成工具来非常容易对你的结构化数据进行读取和写入。这些数据的读取和写入可以是一系列的数据流和使用不同的计算机程序语言。你甚至可以在不对已经部署的程序进行破坏的情况下更新你的数据结构。 Protocol Buffers 是如何进行工作的 你需要制定你希望如何将你的数据进行序列化。你是通过 proto 文件来定义你的消息结构化数据的。 每一 protocol buffer message 是一个小的信息记录逻辑,这个消息中包含有一系列的名字,变量对照序列。下面是一些基本的.proto 文件,这些文件中定义了一个消息,这个消息包含有一个 person 信息: message Person {    required string name =  1 ; ...

Protocol Buffers 简介

Image
文档编辑和持续集成状态: 本文档的 Protocol Buffer 的中文文档使用的是 Asciidoctor 进行编排的 http://docs.ossez.com/protocol-buffers-docs/index.html (本 WIKI 中的内容将会与在线发布的版本同步) Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。 Protocol Buffer 相关快速导航 链接名称 链接地址 Protocol Buffer 中文文档 http://docs.ossez.com/protocol-buffers-docs/index.html 官方文档 https://developers.google.com/protocol-buffers/docs/overview 示例和测试代码 https://github.com/cwiki-us-demo/protocol-buffers-demo-java 如果你在互联网上搜索的话,你可能会看到下面的说明文字。 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。 他们用于 RPC 系统和持续数据存储系统。 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。 它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。 目前提供了 C++、Java、Python 三种语言的...

protoc 编译工具

Image
在进行开发 protoc 之前,你需要首先在你的计算机中安装 protoc 编译工具。 下载编译工具 进入 Protocol Buffers 的源代码中然后选择发布的版本中,找到对应的版本。项目的链接地址为: https://github.com/protocolbuffers/protobuf/releases 然后选择  https://github.com/protocolbuffers/protobuf/releases/download/v3.9.0/protoc-3.9.0-win64.zip ,对应的版本进行下载。 请注意,如果你这里下载了 3.9.0 的版本的,那么在项目的 Gradle 文件也需要对应的 3.9.0 版本。 请下载对应的版本。 设置环境变量 在下载程序后,需要将下载 zip 文件中的 bin 目录设置到环境变量中。 然后运行 protoc --version 来确定你的编译运行版本已经被正确配置。 通过下图,可以查看配置的文件夹。 通过运行 protoc --version 来确定已经配置正确和编译器版本。 转换 Java 对象 假设我们有一个 proto 文件命名为:simple.proto simple.proto 的代码在  https://github.com/cwiki-us-demo/protocol-buffers-demo-java/blob/master/src/main/proto/simple.proto  页面中可以访问到。 你可以 Clone 项目到本地后进行执行。 你可以通过运行下面的命令来将 simple.proto 文件为基础生成一个 Java 对象 protoc --proto_path=src --java_out=src/main/java src/main/proto/simple.proto 生成结果如果正常的话,应该是没有输出的。 然后你访问特定的文件夹后就可以看到生成的 Java 对象。 生成的文件的路径和文件在  com.insight.demo.protocolbuffers.mode 这个包中。 ...

如何开始使用 Akka

如果你是第一次开始使用 Akka,我们推荐你先运行简单的 Hello World 项目。情况参考   Quickstart Guide  页面中的内容来下载和运行 Hello World 示例程序。上面链接中的  快速使用指南  来帮助你了解如何定义 actor 系统,actors 和消息,以及如何使用测试模块和日志系统。 在 30 分钟内,应该可以运行 Hello World 示例程序和项目的结构。 这个  快速使用指南   能够提供下一个级别的信息。这些文章提供了为什么  actor 模型符合现代分布式系统的需求同时包括了帮助你未来使用 Akka 需要的相关信息。主题包括有: Why modern systems need a new programming model How the actor model meets the needs of concurrent, distributed systems Overview of Akka libraries and modules 一些使用 Akka 设计模式用来构建 Hello World 的  更多的完整示例程序 https://www.cwiki.us/display/AkkaZH/Introduction+to+Akka

Akka 介绍

欢迎使用 Akka,Akka 是一套被用来在在多处理器核心和网络之间被设计可扩展和具有相关弹性的开源工具集。Akka 允许你更加关注商业需求而不是书写低级别的代码来提供可靠性,容错率和高性能。 很多常用的设计实践和已经接受的程序模型不能解决一些重要的挑战,这些挑战通常是现代计算机体系结构中固有的。为了让项目取得成功,分布式系统必须能够应付一些环境出现的问题,例如组件崩溃不能响应,发送的消息没有痕迹的就丢失了,为了让分布式系统能够成功的运行,以及网络延迟和波动等问题。这些问题在具有很好管理和监控环境下的数据中心经常会发生,针对虚拟架构环境就更加容易出现上面的这些问题了。 为了帮助你处理上面提到这些现实的问题,Akka 提供了: 不使用低级并发结构的多线程,例如原子或锁;让你免于考虑内存可见性的问题。 系统和组件之间的远程通讯透明性; 让你免于属性和维护复杂的网络代码。 一个高可用性的集群架构,这个集群具有相当的弹性,在线方式;让你真正能够部署一个反应系统。 Reactive System. A reactive system is a system that responds (reacts) to external events。 反应系统是一个能对外部事件做出相应反应的系统。早期所谓的reactive system是软件系统的一个分支,意思正如它的名字所描述的。后来这个概念被美国的David Harel明确下来,其最主要部分是描述反应行为。 什么是反应行为呢?下面看一个转换系统的例子 输入(开始)->软件系统(经过一段时间后停止运行)->(然后)输出 例子中用户把数据输入给计算机,软件对这些数据经过一段时间的计算,最后给出输出结果,我们可以看作一个会计的月结算或者一个测量的统计数据。 能够得知,输入数据经过特定的规则被转换,并且在结束计算过程以后给出结果。而reactive system却与此相反。 与转换系统相反,在reactive system里往往没有明确的时序安排。总体来讲,reactive system表示的是不限制运行时间的系统,这其中要和外部环境相互作用,也就是在外部刺激上的反应(reactive),例如和不同使用者或者外部的硬件等,但是也包括内部发生的交流行为,因为reac...

Travis CI eval ./gradlew assemble 错误

Image
问题 在进行 Travis CI 进行集成编译的时候出现错误。 <-------------> 0% WAITINGThe command "eval ./gradlew assemble " failed. Retrying, 2 of 3. FAILURE: Build failed with an exception. * What went wrong: Task 'assemble' not found in root project 'asciidoc-docs'. * Try: Run gradlew tasks to get a list of available tasks. Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 0s <-------------> 0% WAITINGThe command "eval ./gradlew assemble " failed. Retrying, 3 of 3. 具体的错误信息如下: BUILD FAILED in 8s <-------------> 0% WAITINGThe command "eval ./gradlew assemble " failed. Retrying, 2 of 3. FAILURE: Build failed with an exception. * What went wrong: Task 'assemble' not found in root project 'asciidoc-docs'. * Try: Run gradlew tasks to get a list of available tasks. Run wit...

Travis CI Could not find or load main class org.gradle.wrapper.GradleWrapperMain 错误

Image
问题 在 Travis CI 编译的时候出现 Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain 错误。 详细的错误日志为: Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain The command "eval ./gradlew assemble " failed. Retrying, 2 of 3. Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain The command "eval ./gradlew assemble " failed. Retrying, 3 of 3. Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain The command "eval ./gradlew assemble " failed 3 times. The command "./gradlew assemble" failed and exited with 1 during . Your build has been stopped. 解决方法 看看你提交的代码中 gradle 文件夹有没有提交上去。 如果没有提交这个文件夹的话,需要将源代码中的 gradle 提交到代码库上。