Bluemix不包含VCAP_APPLICATION中的instance_id

时间:2016-01-04 19:10:39

标签: spring ibm-cloud cloudfoundry spring-cloud

我跑了

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Content Layout -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/adView"
        android:layout_below="@id/my_awesome_toolbar" />

    <!-- Navigation Drawer -->
    <android.support.design.widget.NavigationView
        android:id="@+id/navigation"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:itemIconTint="#FF0000"
        app:itemTextColor="#D2691E"
        app:menu="@menu/navigation_menu" />
</android.support.v4.widget.DrawerLayout>

并注意到Bluemix没有在cf env <my app> 对象的返回JSON数据中返回instance_id的值。我的应用程序在Bluemix上运行,有多个实例。大多数其他属性包括VCAP_APPLICATIONapplication_id

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

  

此变量包含已部署的关联属性   应用。结果以JSON格式返回。下表   列出返回的属性。

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

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

更新 - 添加确切错误

VCAP_APPLICATION

由于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,因此出现此错误:

AbstractCloudConfig

3 个答案:

答案 0 :(得分:1)

如果不了解其实例ID,大多数Spring Cloud都会好的。对于服务发现,为一个实例提供一个唯一的标识符可能是一个好主意,但如果你需要,你可以自己轻松地提供一个(例如${random.int}可以工作),并且大多数事情即使你不做也会有效我想,拥有它。对于消息使用者来说更重要,因此您可能需要对Spring Cloud Stream进行更多自定义。

答案 1 :(得分:1)

Bluemix instance_id环境变量中包含VCAP_APPLICATION

运行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 -   {&#34;限制&#34; {&#34; MEM&#34;:512,&#34;磁盘&#34;:1024,&#34; FDS&#34;:16384},&#34; APPLICATION_ID& #34;:&#34; 9958288f-9842-4ddc-93dd-1ea3c90634cd&#34;&#34; APPLICATION_VERSION&#34;:&#34; 05c3b877-035f-4936-A504-cda523eb8fdf&#34;&#34 ; APPLICATION_NAME&#34;:&#34; ADS-java的cloudant&#34;&#34; application_uris&#34;:[&#34; ads-java-cloudant.mybluemix.net&#34],&#34 ;版本&#34;:&#34; 05c3b877-035f-4936-A504-cda523eb8fdf&#34;&#34;名称&#34;:&#34; ADS-java的cloudant&#34;&#34; SPACE_NAME& #34;:&#34; repro_alexds&#34;&#34; space_id&#34;:&#34; 3075a3e5-2c29-4d8a-9e97-06aed18af1c6&#34;&#34;的URI&#34;:[& #34; ads-java-cloudant.mybluemix.net&#34],&#34;用户&#34;:空,的&#34; INSTANCE_ID&#34;:&#34; 427e4ba5851945508e6e96465e097af7&#34; ,&#34; instance_index&#34;:0,&#34;主机&#34;:&#34; 0.0.0.0&#34;&#34;端口&#34;:62347&#34; started_at&#34;:&#34; 2016年1月5日   22:02:02 + 0000&#34;,&#34; started_at_timestamp&#34;:1452031322,&#34; start&#34;:&#34; 2016-01-05   22:02:02 + 0000&#34;,&#34; state_timestamp&#34;:1452031322}

答案 2 :(得分:0)

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

无论如何,你可以通过描述这个平台可能错误的支持小部件来提高Bluemix支持的票证。