В этом посте мы поговорим об особенностях языка балерин, которые уникальны для него самого. Эти функции специально разработаны для удовлетворения требований технологической области, на которую мы ориентируемся с помощью этого нового языка.

XML, JSON и datatable - это собственные типы данных

Общение - это сообщения и данные. XML и JSON являются наиболее распространенными и активно используемыми типами данных в любой экосистеме интеграции. Помимо этих двух типов, взаимодействие с базами данных (SQL, NoSQL) является еще одним наиболее распространенным вариантом использования. Мы рассмотрели все 3 сценария с собственными типами данных.

Вы можете определять типы данных xml и json во встроенном виде и легко управлять ими с помощью служебных методов в пакетах jsons и messages.

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>{$name}</name>`;

Приведенные выше 2 строки создают сообщение xml со следующими данными в нем.

<name>WSO2</name>

Вы можете сделать то же самое для сообщений JSON аналогичным образом.

Datatable - это представление указателя на набор результатов, возвращенный из запроса к базе данных. Он работает в потоковом режиме. Данные будут использоваться в том виде, в котором они используются в программе. Вот пример кода для чтения данных в программе-балерине с использованием типа datatable.

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 (язык) воплощает эту концепцию в более удобную для программистов концепцию со следующими двумя функциями.

Параллельная обработка с worker

Концепция воркера заключается в том, что это поток выполнения. Выполнение будет осуществлять «Рабочий по умолчанию». Если программист Ballerina хочет делегировать свою работу другому «рабочему», который работает параллельно с «рабочим по умолчанию», он может создать рабочего и отправить ему сообщение со следующим синтаксисом.

worker friend(message m) {
//Do some work here
reply m';
}
msg -> friend;
//Do my own work
replyMsg <- friend;

В этом делегировании задач есть несколько особенностей.

  • worker (friend) будет работать параллельно с worker по умолчанию.
  • рабочий по умолчанию может продолжить работу самостоятельно
  • когда воркер по умолчанию хочет получить результат от друга-воркера, он вызывает друга-воркера и блокирует его до тех пор, пока не получит сообщение с результатом или не истечет время ожидания через 1 минуту.

Параллельная обработка с fork-join (несколько рабочих)

Иногда пользователям нужно отправить одно и то же сообщение нескольким рабочим одновременно и обрабатывать результаты по-разному. Вот где на помощь приходит fork-join. Программист Ballerina может определить воркеров и их действия в операторе fork-join, а затем решить, что делать, когда воркеры закончат свою работу. Ниже приведен пример кода fork-join.

fork(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
}

Приведенный выше пример кода представляет собой мощную программу, которую будет действительно сложно реализовать на любом другом языке программирования (некоторые языки даже этого не могут сделать). Но с Ballerina вы получаете всю мощь с простотой. Вот объяснение вышеуказанной программы.

  • рабочие «chanaka», «sameera» и «isuru» выполняются параллельно с основным «рабочим по умолчанию».
  • Условие соединения определяет, как пользователю нужно будет получить результаты запущенных выше рабочих. В этом примере он ожидает «всех» рабочих. Присоединиться к рабочим можно одним из следующих вариантов

- присоединяйтесь ко всем 3 работникам

- присоединяйтесь ко всем указанным работникам

- присоединиться к любому 1 из всех 3 рабочих

- присоединиться к любому из указанных рабочих

  • Условие тайм-аута связано с блоком соединения. Пользователь может указать значение времени ожидания в секундах, чтобы дождаться выполнения условия соединения. Если это условие соединения не выполняется в течение заданного времени, блок тайм-аута будет выполнен с любыми результатами, возвращенными от завершенных рабочих процессов.
  • После запуска и выполнения оператора fork-join «рабочий по умолчанию» ждет, пока он не завершит блок соединения или блок тайм-аута. Все это время он будет бездействовать (небольшой отдых).

В дополнение к вышеупомянутым функциям рабочие могут вызывать любую функцию, объявленную в том же пакете или любом другом пакете. Одно из ограничений текущей реализации worker / fork-join заключается в том, что рабочие не могут связываться ни с одним другим рабочим, кроме «Default worker».

Полный набор инструментов для разработчиков, которые упростят процесс разработки.

Балерина - это не язык, а сама среда исполнения. Он поставляется с полным набором инструментов для разработчиков, которые помогут вам максимально быстро и легко начать знакомство с Ballerina.

Композитор

Composer - это основной инструмент для написания программ Ballerina. Вот что он умеет:

  • Исходный код, дизайн и представление Swagger одной и той же реализации и возможность редактирования через любой интерфейс.
  • Запуск / отладка программ Ballerina прямо из редактора
  • Перетаскивайте элементы программы и составляйте свою программу

Testerina

Это фреймворк для модульного тестирования программ Ballerina. Пользователи могут писать модульные тесты для тестирования своего исходного кода Ballerina с помощью этой платформы. Он позволяет пользователям имитировать компоненты Ballerina и эмулировать фактические программы Ballerina в среде модульного тестирования. Подробности можно найти в этом среднем сообщении.

Разъемы

Это клиентские коннекторы, которые предназначены для подключения к различным облачным API и системам. Это одна из точек расширения, которые есть у Ballerina, и пользователи могут писать свои собственные коннекторы с языка Ballerina и использовать их в любой другой программе Ballerina.

Плагины редактора

Еще один важный набор инструментов, поставляемый с дистрибутивом Ballerina, - это набор подключаемых модулей для популярных редакторов исходного кода, таких как Intellij Idea, Atom, VSCode, Vim. Это гарантирует, что если вы являетесь хардкорным редактором сценариев, который не интересуется IDE, вам также будут предоставлены возможности языка балерины в вашем любимом редакторе.

Я только наполовину справился с новыми классными функциями Ballerina, но этого хватит для одного поста. Вы можете опробовать эти интересные функции и поделиться своим опытом и мыслями через нашу группу пользователей Google, Twitter, Facebook, Medium или любой другой канал, либо оставив комментарий к этому сообщению.