Bluemix 不在 VCAP_APPLICATION 中包含 instance_id

Bluemix Does Not Include instance_id in VCAP_APPLICATION

我运行

cf env <my app>

并注意到 Bluemix 没有在返回的 VCAP_APPLICATION 对象的 JSON 数据中返回 instance_id 的值。我的应用程序在具有多个实例的 Bluemix 上 运行。大多数其他属性,包括 application_idapplication_name 都存在。

根据 documentation,听起来所有属性都应该始终存在:

This variable contains the associated attributes for a deployed application. Results are returned in JSON format. The table below lists the attributes that are returned.

我遇到的问题是,如果缺少某些必需的属性,Spring Cloud 将无法工作。我是否认为 instance_id 被省略是 Bluemix 中的错误?

我在向 VCAP_APPLICATION 添加虚拟值后确认 Spring Cloud 可以与 Bluemix 一起正常工作。


更新 -- 添加准确的错误

Caused by: java.lang.NullPointerException
    at java.util.Hashtable.put(Hashtable.java:459)
    at org.springframework.cloud.Cloud.getAppProperties(Cloud.java:252)
    at org.springframework.cloud.Cloud.getCloudProperties(Cloud.java:236)
    at org.springframework.cloud.config.java.AbstractCloudConfig.properties(AbstractCloudConfig.java:67)

此错误是由于 Configuration class 中的此方法扩展 AbstractCloudConfig:

@Bean
public Properties cloudProperties(){
    return properties();
}

大多数 Spring Cloud 如果不知道其实例 ID 就没问题。对于服务发现,为一个实例设置一个唯一标识符可能是个好主意,但如果需要,您可以轻松地自己提供一个(例如 ${random.int} 会起作用),即使您不这样做,大多数事情也会起作用没有它,我想。对于消息消费者而言,它更为重要,因此您可能需要对 Spring Cloud Stream 进行更多自定义。

您的应用程序有多少个实例运行? 无论如何 spring Cloud 会接受一个自我管理的 ID,所以你可以自己提供一个值。

无论如何,您都可以通过描述该平台可能存在的错误的支持小部件向 Bluemix 支持提出请求。

Bluemix 是否VCAP_APPLICATION 环境变量中包含 instance_id

当您 运行 cf env <app_name> 命令行时不显示,但当您从 Java 应用程序转储其值时可以看到它可用。

我将以下代码添加到我的 Bluemix Java 应用程序中:

String VCAP_APPLICATION = System.getenv("VCAP_APPLICATION");
System.out.println("VCAP_APPLICATION - " + VCAP_APPLICATION);

然后 运行 以下命令检查最近的日志:

$ cf logs <app-name> --recent

我可以在下面的输出中看到 instance_id

2016-01-05T17:05:00.01-0500 [App/0] OUT VCAP_APPLICATION - {"limits":{"mem":512,"disk":1024,"fds":16384},"application_id":"9958288f-9842-4ddc-93dd-1ea3c90634cd","application_version":"05c3b877-035f-4936-a504-cda523eb8fdf","application_name":"ads-java-cloudant","application_uris":["ads-java-cloudant.mybluemix.net"],"version":"05c3b877-035f-4936-a504-cda523eb8fdf","name":"ads-java-cloudant","space_name":"repro_alexds","space_id":"3075a3e5-2c29-4d8a-9e97-06aed18af1c6","uris":["ads-java-cloudant.mybluemix.net"],"users":null,"instance_id":"427e4ba5851945508e6e96465e097af7","instance_index":0,"host":"0.0.0.0","port":62347,"started_at":"2016-01-05 22:02:02 +0000","started_at_timestamp":1452031322,"start":"2016-01-05 22:02:02 +0000","state_timestamp":1452031322}