Как передать переменную в worker-балерину?

Я пытаюсь реорганизовать некоторый код, чтобы он был внутри рабочего, и получаю сообщение об ошибке:

неопределенный символ userId

Кажется, рабочий не может видеть переменные из области над ним. Как я могу заставить работника увидеть передаваемый параметр?

import ballerina.net.http;
import ballerina.lang.messages;
import ballerina.lang.jsons;

@http:BasePath ("/foo")
  service barApi {
  http:ClientConnector endpointEP = create http:ClientConnector("http://example.com");

  @http:GET
  @http:Path("/users/{userId}")
  resource users (message m,
  @http:PathParam("userId") string userId) {
    worker sampleWorker(message m) {
      string requestPath = "/user/" + userId;
      message response = http:ClientConnector.get(endpointEP, requestPath, m);

person geekaholic    schedule 24.03.2017    source источник
comment
В настоящее время рабочие не могут видеть переменные из объемлющей области видимости. Это ограничено дизайном в текущей версии Ballerina. Но у нас было несколько обсуждений, чтобы улучшить это поведение, когда оно позволит вам передавать другие переменные рабочему процессу. На данный момент вы можете только передать сообщение. См. github.com/ballerinalang/ballerina/blob/master/ docs/ для получения дополнительной информации.   -  person Sameera Jayasoma    schedule 25.03.2017
comment
@SameeraJayasoma На данный момент синтаксический анализатор языка слишком ограничен. Например, мне кажется, что я не могу изменить сообщение m прямо над рабочим блоком, чтобы передать через него данные. Я также не могу определить глобальную endpointEP над разделом \@http::BasePath, который используется внутри рабочего процесса.   -  person geekaholic    schedule 30.03.2017
comment
Чтобы добавить к вышесказанному, я смог определить глобальную переменную, если она является константой. Любая причина дизайна для разрешения только постоянных глобальных переменных, но не переменных?   -  person geekaholic    schedule 31.03.2017
comment
Мы пришли к выводу, как улучшить дизайн рабочего места Ballerina. Более подробную информацию вы можете найти в этом документе. Пожалуйста, просмотрите это и дайте нам свой отзыв. docs.google.com/document/d/   -  person Sameera Jayasoma    schedule 03.04.2017


Ответы (1)


Вы можете передать любое количество переменных рабочему балерине с новым дизайном взаимодействия рабочих. Допустим, вы хотите передать 2 переменные из рабочего процесса по умолчанию (основного) другому рабочему процессу W1. Вот пример кода.

import ballerina.lang.system;

function main(string[] args) {
int x = 10;
string s = "Test";
x, s -> W1;

worker W1 {
int y;
string t;
y,t <- default;
system:println("Inside worker " + y + " " + t);

}
}
person Chanaka udaya    schedule 01.07.2017