我正在使用 Apama v10.3.1。我正在使用 Cumulocity 安装的内置 Apama 容器,我上传的只是一个监视器,而不是整个 Apama 项目。在我的 Apama 监视器中,我正在对 Cumulocity REST API 执行 HTTP GET 请求,以获取监视器处理所需的其他参数。
我的问题是在执行 HTTP 请求时我需要提供用户名和密码,否则会出现 401 错误。由于我不想在我的显示器中对用户和密码进行硬编码,有没有办法使用内置 Apama 容器用于与 Cumulocity 通信的凭据?由于 Apama 在后台与 Cumulocity 进行通信以交换事件、测量值等,因此我假设某处有可用的凭据。是这样吗?如果是这样,我如何告诉我的 Apama 显示器使用这些凭据?
这是代码的摘录:
monitor SampleAlarmRules {
action onload() {
monitor.subscribe(Alarm.CHANNEL);
monitor.subscribe(FindManagedObjectResponse.CHANNEL);
on all Alarm(type = "ax_UnavailabilityAlarm") as a {
onAlarm(a.source);
}
}
action onAlarm(string source) {
integer reqId := integer.getUnique();
send FindManagedObject(reqId, source, new dictionary<string,string>) to FindManagedObject.CHANNEL;
on FindManagedObjectResponse(reqId = reqId) as resp
and not FindManagedObjectResponseAck(reqId) {
ManagedObject dev := resp.managedObject;
dictionary<string, string> httpConfig := {
HttpTransport.CONFIG_AUTH_TYPE:"HTTP_BASIC"
//HttpTransport.CONFIG_USERNAME:"someUser",
//HttpTransport.CONFIG_PASSWORD:"somePassword"
};
HttpTransport httpTransport := HttpTransport.getOrCreateWithConfigurations("someBaseUrl", 80, httpConfig);
Request request := httpTransport.createGETRequest("/inventory/managedObjects/5706999?withParents=true");
request.execute(handleResponse);
}
}
action handleResponse(Response response) {
JSONPlugin json := new JSONPlugin;
if response.isSuccess(){
switch (response.payload.data as payload) {
case string: {
}
default: {
}
}
}
else {
print "###Request failed. Response status is: " + response.statusCode.toString() + " | " + response.statusMessage;
}
}
}
使用此配置(用户和密码注释)我得到以下打印语句:
请求失败。响应状态为:401 | 未经授权
启用用户和密码后,请求成功执行。但是,我不想在这里硬编码用户和密码。
另外,有没有办法从环境变量或类似的东西中获取当前租户,这样我就不必对基本 URL 进行硬编码?
谢谢马蒂亚斯