У меня есть простой клиент, использующий Salesforce EMP Connector и подписывающийся на событие платформы. Когда он запускается из командной строки на машине с Windows, он работает нормально, а подписка и последующие события работают нормально.
Когда я развертываю тот же код, что и функция Java Lambda в AWS - она успешно подписывается, но не ожидает и не ожидает события. Есть ли какие-то ограничения на использование Java-клиента Bayeaux в AWS Lambda?
Ниже приведен код в лямбда-обработчике -
public String handleRequest(Object input, Context context) {
try {
context.getLogger().log("Input: " + input);
Consumer<Map<String, Object>> consumer = event -> System.out.println(String.format("Received:\n%s", JSON.toString(event)));
BearerTokenProvider tokenProvider = new BearerTokenProvider(() -> {
try {
return LoginHelper.login(new URL(SFDC_TEST_URL), SFDC_TEST_USERNAME, SFDC_PASS_SEC_KEY);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
BayeuxParameters params = tokenProvider.login();
EmpConnector connector = new EmpConnector(params);
LoggingListener loggingListener = new LoggingListener(true, true);
connector.addListener(META_HANDSHAKE, loggingListener)
.addListener(META_CONNECT, loggingListener)
.addListener(META_DISCONNECT, loggingListener)
.addListener(META_SUBSCRIBE, loggingListener)
.addListener(META_UNSUBSCRIBE, loggingListener);
connector.setBearerTokenProvider(tokenProvider);
connector.setBearerTokenProvider(tokenProvider);
connector.start().get(5, TimeUnit.SECONDS);
TopicSubscription subscription = connector.subscribe(SFDC_TOPIC_EVENT_NAME, EmpConnector.REPLAY_FROM_TIP, consumer).get(2, TimeUnit.SECONDS);
System.out.println(String.format("Subscribed: %s", subscription));
// TODO: implement your handler
return "Hello from Lambda!";
}catch(Exception e) {
e.printStackTrace();
return "exited with error";
}
}