在这篇文章中,我们将讨论芭蕾舞语言的独特之处。这些特性是专门为满足我们使用这种新语言所针对的技术领域的需求而设计的。
XML、JSON和datatable都是原生数据类型
通信就是信息和数据。在任何类型的集成eco系统中,XML和JSON是最常见和使用最频繁的数据类型。除了这两种类型之外,与数据库的交互(SQL、NoSQL)是另一种最常见的用例。我们已经介绍了使用本机数据类型的所有3种场景。
您可以内联定义xml和json数据类型,并使用jsons和消息包中的实用程序方法轻松地操作它们。
json j = `{"company":{"name":"wso2", "country":"USA"}}`;
messages:setJsonPayload(m, j);
通过以上两行,您可以定义自己的json消息,并用您的消息替换当前消息。您也可以对XML消息执行同样的操作。
如果您需要从一个application/json类型的消息中提取一些数据,您可以通过下面的代码行轻松地做到这一点。
json newJson = jsons:getJson(messages:getJsonPayload(m), "$.company");
上面的代码将把下面的json消息设置为newJson变量。
{"name":"wso2","country":"USA"}
这种内联表示的另一个很酷的特性是可以访问这些模板表达式中的变量。在定义如下XML/JSON消息时,可以访问任何变量。
string name = "WSO2";
xml x = `{$name}`;
上面的两行代码创建了一个xml消息,其中包含以下数据。
您可以以类似的方式对JSON消息执行相同的操作。
Datatable是指向从数据库查询返回的结果集的指针的表示。它以流方式工作。数据将在程序中使用时被使用。下面是使用datatable类型读取ballerina程序中的数据的示例代码。
string s; datatable dt = sql:ClientConnector.select(testDB, "SELECT int_type, long_type, float_type, double_type, boolean_type, string_type from DataTable LIMIT 1",parameters); while (datatables:next(dt)) { s = datatables:getString(dt, "string_type"); // do something with s}
您可以在Ballerina API文档中找到完整的函数集。
并行处理非常简单
“并行处理”这个术语甚至让有经验的程序员都感到害怕。但是使用Ballerina,您可以像执行任何其他动作一样执行并行处理。“芭蕾舞女”这个词的主要概念源于一种芭蕾舞的概念,在这种舞蹈中,许多不同的芭蕾舞演员在舞蹈过程中通过互相发送信息来实现同步。这个过程的技术术语称为“编排”。Ballerina (language)通过以下两个特性将这个概念引入到一个对程序员更友好的概念中。
与工作者并行处理
工作者的概念是,它是一个执行流。执行将由“默认工作者”执行。如果芭蕾舞演员程序员想把他的工作委托给另一个“Worker”,这个“Worker”与“Default Worker”并行工作,他可以创建一个Worker并用下面的语法向那个Worker发送消息。
worker friend(message m) {
//Do some work here
reply m';
}
msg -> friend;
//Do my own work
replyMsg
这个任务委托有一些特别的地方。
worker (friend)将与默认worker并行运行。
默认的辅助程序可以独立地继续它的辅助程序
当默认worker想要从朋友worker那里得到结果时,它会调用朋友worker并阻塞他们,直到它得到结果消息或在1分钟后超时。
使用fork-join(多个worker)并行处理
有时用户需要在同一时间向多个worker发送相同的消息,并以不同的方式处理结果。这就是fork-join起作用的地方。Ballerina程序员可以在fork-join语句中定义工作者及其操作,然后决定工作者完成工作后要做什么。下面给出了fork-join的示例代码。
ffork(msg) {
worker chanaka(message m1) {
//Do some work here
reply m1';
}
worker sameera(message m2) {
//Do something else
reply m2';
}
worker isuru(message m3) {
//Do another thing
reply m3';
} join (all)(message[] results) {
//Do something with results message array
} timeout (60)(message[] resultsBeforeTimeout) {
//Do something after timeout
}
上面的代码示例是一个功能强大的程序,用任何其他编程语言都很难实现(有些语言甚至无法做到这一点)。但是在《芭蕾舞女演员》中,你可以从简单中获得所有的力量。下面是对上述程序的解释。
工作者“chanaka”、“sameera”和“isuru”与主“默认工人”并行执行。
join条件指定用户需要如何获得上述已启动工作程序的结果。在这个示例中,它等待“所有”工作者。可以通过以下选项之一加入工作人员
-加入所有3个工人
-加入所有指定的工人
-加入所有3个工人中的任何一个
-加入任何一个指定的工人
超时条件与连接块耦合。用户可以以秒为单位指定tiemout值,以等待连接条件得到满足。如果联接条件在给定的时间内没有得到满足,则将执行超时块,并从完成的worker返回任何结果。
fork-join语句一旦启动并执行,“默认worker”就会一直等待,直到它完成join块或超时块。在那段时间(休息时)它将一直闲置着。
除了上面提到的特性,工作人员还可以调用同一个包或任何其他包中声明的任何函数。当前worker/fork-join实现的一个限制是,除了“默认worker”之外,worker不能与任何其他worker通信。
全面的开发工具集,使您的开发体验尽可能简单
Ballerina不是语言和运行时本身。它提供了一套完整的开发工具,可以帮助您尽可能快速和轻松地开始您的芭蕾舞演员体验。
作曲家(Composer)
作曲家是编写芭蕾舞程序的主要工具。以下是它的一些功能:
源码,设计和Swagger视图相同的实现和编辑能力,通过任何界面
直接从编辑器运行/调试Ballerina程序
拖放程序元素并组成程序
Testerina
这是Ballerina程序的单元测试框架。用户可以用这个框架编写单元测试来测试他们的Ballerina源代码。它允许用户在单元测试环境中模拟Ballerina组件和模拟实际的Ballerina程序。你可以从这篇文章中找到细节。
连接器
这些是客户端连接器,它们被编写来连接不同的云api和系统。这是Ballerina拥有的一个扩展点,用户可以使用Ballerina语言编写自己的连接器,并在任何其他Ballerina程序中使用。
编辑器插件
Ballerina工具发行版附带的另一套重要工具是一套用于流行源代码编辑器(如Intellij Idea、Atom、VSCode、Vim)的编辑器插件。这将确保如果您是一个对ide不感兴趣的铁杆脚本编辑人员,那么您还可以在您最喜欢的编辑器中获得芭蕾舞语言能力。
领取专属 10元无门槛券
私享最新 技术干货