org.springframework.cloud
spring-cloud-alibaba-dependencies
${spring.cloud.alibaba.version}
pom
import
org.apache.maven.plugins
maven-compiler-plugin
${java.version}${java.version}
${project.build.sourceEncoding}
可见这是个普通的父工程,里面对spring cloud和spring cloud alibaba的版本做了控制,避免子工程还要各种指定版本的繁琐操作;
制作服务提供者镜像simple-provider是个java web应用,使用了spring cloud alibaba的依赖库之后可以使用Nacos的注册发现服务,整个工程的开发步骤如下:
- 基于maven创建工程,其pom.xml内容如下:
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> nacosdemo com.bolingcavalry 1.0-SNAPSHOT 4.0.0 simpleprovider org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-maven-plugin com.google.cloud.tools jib-maven-plugin 1.3.0 openjdk:8u201-jdk-alpine3.9 bolingcavalry/nacos
p
r
o
j
e
c
t
.
a
r
t
i
f
a
c
t
I
d
:
{project.artifactId}:
project.artifactId:{project.version} -Xms1g -Xmx1g 上述内容有两点需要注意: a. 依赖spring-cloud-starter-alibaba-nacos-discovery,这样可以用上spring cloud nacos的服务; b. 使用了maven插件jib-maven-plugin,用于将应用构建成docker镜像,此插件相关的详情请参考《Docker与Jib(maven插件版)实战》; 2. 配置文件application.properties,配置应用名称和nacos地址,注意这里nacos地址配置的是nacoshost,对应的是后面docker-compose.yml中的link参数: spring.application.name=simple-provider spring.cloud.nacos.discovery.server-addr=nacoshost:8848 package simpleprovider; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableDiscoveryClient @SpringBootApplication public class SimpleProviderApplication { public static void main(String[] args) { SpringApplication.run(SimpleProviderApplication.class, args); } } package simpleprovider.controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.text.SimpleDateFormat; import java.util.Date; @RestController public class ProviderController { @RequestMapping(value = “/hello/{name}”, method = RequestMethod.GET) public String hello(@PathVariable(“name”) String name){ return "hello " + name + ", " + new SimpleDateFormat(“yyyy-mm-dd HH:mm:ss”).format(new Date()); } } mvn compile jib:dockerBuild simple-consumer是个java web应用,启动后对外提供http服务,响应的时候,通过nacos取得simple-provider的地址,然后向simple-provider发请求,将响应返回给浏览器: xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> nacosdemo com.bolingcavalry 1.0-SNAPSHOT 4.0.0 simpleconsumer org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-maven-plugin com.google.cloud.tools jib-maven-plugin 1.3.0 openjdk:8u201-jdk-alpine3.9 bolingcavalry/nacos
p
r
o
j
e
c
t
.
a
r
t
i
f
a
c
t
I
d
:
{project.artifactId}:
project.artifactId:{project.version} -Xms1g -Xmx1g 8080 spring.application.name=simple-consumer spring.cloud.nacos.discovery.server-addr=nacoshost:8848 package com.bolingcavalry.simpleconsumer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableDiscoveryClient @SpringBootApplication public class SimpleConsumerApplication { public static void main(String[] args) { SpringApplication.run(SimpleConsumerApplication.class, args); } } package com.bolingcavalry.simpleconsumer.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import java.text.SimpleDateFormat; import java.util.Date; @RestController public class ConsumerController { @Autowired LoadBalancerClient loadBalancerClient; @RequestMapping("/test") public String test(){ //根据应用名称取得实例对象 ServiceInstance serviceInstance = loadBalancerClient.choose(“simple-provider”); //根据实例对象取得地址 String uri = serviceInstance.getUri().toString(); String result = new RestTemplate().getForObject(uri + “/hello/bolingcavalry”, String.class); return "provider uri : " + uri + “ } } mvn compile jib:dockerBuild 三个镜像都准备好了,接下来是做容器编排,docker-compose.yml内容如下: version: ‘2’ services: nacos: i mage: bolingcavalry/nacosserver:0.0.1 container_name: nacos restart: unless-stopped
” + “response :” + result;【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取



