您将学习什么
学习构建、部署和扩展云就绪Predix微服务,包括云清单、属性、测试用例和后端微服务的最佳实践。本教程将详细介绍实现REST api的Hello World微服务模板。
我们有两个github项目,其中一个使用Apache CXF实现JAX-RS 2.0标准Java注释@GET、@PUT、@POST、@DELETE等。另一个使用Spring RestTemplate。Spring RestTemplate仍使用最初的spring注释,例如@RequestMapping(method = RequestMethod.DELETE)。
两个项目均利用Spring的所有其他功能,在我们的REST实现中包括Spring安全筛选器或(其他筛选器)。在将来的教程中当我们介绍如何在REST API中实现安全和授权机制以便在Predix云中创建安全微服务时,您将会看到这一点非常有用。
每个后端微服务模板项目均共享以下特性
• 测试用例与测试用例框架
• 外部属性文件
• REST实现与框架
• 通过一个清单文件实现云就绪
• 本机、DEV、QA、Stage、Prod等环境
• 可持续集成 您需要学习什么 开发工具箱教程(可选) 您需要设置什么 代理 如果您通过公司的代理服务器访问互联网,请回顾关于设置代理的教程。 需要的工具 如果您不使用开发工具箱,确保用以下工具配置您的开发环境。 • CloudFoundry CLI • Git • Java SE开发套件(JDK) • Maven 安装自动工具 • 在Mac OSX上,在终端窗口中运行以下命令 bash <( curl https://raw.githubusercontent.com/PredixDev/local-setup/master/setup-mac.sh ) –cf –git –jdk –maven • 在Windows上,在“开始”菜单的“附件”中,右击“命令提示符”并选择“以管理员身份运行”。然后复制以下命令并运行。 @powershell -Command “(new-object net.webclient).DownloadFile(‘https://raw.githubusercontent.com/PredixDev/local-setup/master/setup-windows.bat‘,’%TEMP%\setup-windows.bat’)” && “%TEMP%\setup-windows.bat” /cf /git /jdk /maven 您需要做什么 只需3步您就可以完成一次Cloud Foundry微服务。1.Git clone ,2. mvn clean package,3. cf push。这样,让我们详细了解一下这个微服务模板的功能,您就可以对其进行扩展,以便在云上创建您自己的微服务。 下载项目 1. 如果您使用公司的互联网代理服务器,您可能需要设置您的代理环境变量,并在Maven settings.xml文件中设置代理。查看我们的设置代理教程了解更多信息。 2. 使用Git克隆项目,然后转到项目目录。 $ git clone https://github.com/PredixDev/predix-microservice-cf-jsr.git $ cd predix-microservice-cf-jsr 注:如果您感兴趣,我们有另外一个使用Spring Rest模板的项目。我们将会在下面指出细微差别。使用以下命令下载该项目。 $ git clone https://github.com/PredixDev/predix-microservice-cf-spring.git

  1. 使用Maven,构建并打包代码 $ mvn clean package note: mvn clean install may run integration tests against microservices you may not have set up yet

将微服务推送到云上 CloudFoundry推送命令检索从manifest.yml文件推送微服务的属性。 请查看predix-microservice-cf manifest.yml,其中提供了用于推送cloud foundry应用程序的属性和说明

  1. 将应用程序推送到云上,用您的名称替换。该名称在整个云上的所有应用程序中必须是唯一的。推送命令的这个版本会覆盖清单文件中使用的项目名称。 $ cf push -predix-microservice-cf-jsr
  2. 如果要查看云中微服务的API:
    Copy the url from the output of the push command then in your browser, enter https:// and then paste the url https://(cloud-url-here)

查看您在云中的微服务

您应该在您的浏览器中看到“Greetings from Predix Spring Boot CXF!”

resttemplate超时设置及解析_方法


如果您选择上面的Spring rest-template项目,将会看到

resttemplate超时设置及解析_设置_02

载入Eclipse
使用Eclipse更改REST微服务或在本地运行微服务。您可以通过转到标题为将微服务推送到云上的部分直接将微服务推送到云上。 Eclipse或Eclipse STS - Springsource工具套件均支持 在Ecli[链接内容]pse内执行以下操作: Using the File/Import menu item select Maven/Existing Maven Projects and click Next Browse to the predix-microservice-cf-jsr dir and click Finish.

REST API 作为调节应用程序的一部分,Spring启动Tomcat web容器,GET、PUT、POST、DELETE REST URL在其中呈现。CXF执行的JSR 339 Spec定义了我们在DefaultService.java和DynamicServiceImpl.java文件中写入的注释,其接口为DynamicService.java。

DefaultService直接在predix-microservice-cf-jsr-cxf-context.xml spring文件中注册。 DynamicServiceImpl显示了一个在自身的代码中通过init()方法注册CXF的不同方法。 @PostConstruct public void init() { this.serviceManagerService.createRestWebService(this, null); }
不论哪种方法,@Path、@GET、@PUT、@POST或@DELETE等REST注释在您创建REST端点时均可用。在本示例中,当有人向http://localhost:9092/health url发送一个HTTP GET请求时,将调用greetings()方法。
@GET @Path(“health/”) public Response greetings() { }
现在您可以在greetings()方法中完全控制微服务功能的实现。

在本地尝试
1. 使用Eclipse,启动应用程序。
Right Click the predix-microservice-cf select Run As / Java Application if prompted, choose Application.java and click OK or in Eclise STS - Right Click predix-microservice-cf project and select Run As / Spring Boot Application
2. 如果要检查微服务的api,打开一个浏览器并导航至:
http://localhost:9092

查看结果

1. 您应该在您的浏览器中看到“Greetings from Predix Spring Boot CXF!”

resttemplate超时设置及解析_模板_03


如果您选择上面的spring rest-template项目,将会看到

  1. 查看API explorer链接中的Swagger文件。微服务记录在/api url中。
  2. 查看/health url中的微服务健康状态链接。
  3. 使用Github页面查看/docs url中的文件。我们提供在README.md中请求的一个动态index.html。
  4. 查看Github页面上的Java Docs。
  5. 所有基于微服务模板的微服务将sources.jar和javadoc.jar部署到artifactory。通过以下操作简单构建您的应用程序:  mvn clean source:jar javadoc:jar package  mvn deploy将这些命令部署到您的maven存储库中。请注意,由于’mvn install’将运行集成测试,因此您可能需要设置属性文件,以指向您的predix服务实例。
  6. 确保在Eclipse中停止微服务,以便为下一个教程案例释放端口。

当您启动微服务时会发生什么? 微服务模板是一个SpringBoot应用程序,简单来说,它意味着这个基于REST的微服务的所有标准boiler-plate行为都由Spring来处理。所有行为均以Application.java中启动Spring上下文的main()方法开始,。以下代码生成一个完整的微服务,这样您就可以快速开始编写您的应用程序。 public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(Application.class); ApplicationContext ctx = springApplication.run(args); 值得注意的(在文件的底部定义)是CXFServlet bean,它将所有以”/service”开头的HTTP请求路由至您的代码以及网页应用程序将要运行的Tomcat web容器。 @Bean public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() { return new TomcatEmbeddedServletContainerFactory(); } @Bean public ServletRegistrationBean servletRegistrationBean() { return new ServletRegistrationBean(new CXFServlet(), “/service/*”); } @ImportResource注释标示某些xml文件的位置,以设置更多Bean(通过Spring注册的Java类)。请注意spring xml文件的--context.xml的命名规范。我们将”cxf”上下文设置文件与”scan”上下文文件分隔开。 @ImportResource( { “classpath*:META-INF/spring/predix-microservice-cf-jsr-cxf-context.xml“, “classpath*:META-INF/spring/predix-microservice-cf-jsr-scan-context.xml” } 启动后,Spring会配置组成应用程序的所有Bean。“component-scan”标示在哪个java包中寻找更多的Bean。 该类只需要一个注释(例如@Component) @Component @Path(“/”) public class DefaultService Spring将在内存中创建该类并将其自动装配(将其公开)至其他Bean。这就是所谓的依赖注入或控制反转,当您在需要模拟测试行为而创建测试用例时这是一个非常有用的工具。

您可以使用一个@ComponentScan注释列出驻留有Bean的所有java包,或者您也可以将所有Spring Bean XML条目放在一个文件中。有时,最好是创建一个单独的文件用于配置扫描位置或属性文件的位置。这样做可以为需要重载特定功能的测试用例提供方便。另外有时候,当一个Spring项目是另一个项目的“依赖”时,扫描文件夹和属性文件等特定功能需要被重载。

Action中的微服务模板 多个教程指南中的所有样本微服务,例如RMD参考应用程序、构建一个基本应用程序和边缘启动程序,均利用微服务模板作为一个起始点。这些微服务与UAA、资产、时间序列、分析、Predix机器、ACS和UAA等集成在一起。而且,每个微服务均使用多个实用程序项目或SDK。

您学到了什么 现在,您已拥有一个可用于在Predix云中创建应用程序的微服务模板。简单更改REST url并添加您的工业互联网功能。如果要查看模板的更多功能,请访问微服务模板:后端的更多功能 - Java SpringBoot REST。

活动概况:为了让国内开发者第一时间了解试用Predix 平台,及时跟踪了解国际工业互联网的最新技术,GE数字强调文字创新坊推出了Predix 开发者试用计划,并将提供Predix 的基础服务、微服务模块、开发工具等给有兴趣的开发者试用,试用期为3个月,这也是开发者进行工业化数字转型的第一步。需要注意的是该账号仅作开发评估目的使用,不能应用于任何商业用途,最终注册结果以邮件为准。并且GE保留对相关帐号申请、管理和使用的解释权。试用结束后,GE不保留任何开发者数据!