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内容如下:
<project xmlns=“http://maven.apache.org/POM/4.0.0”
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
- 应用启动类SimpleProviderApplication ,配置了注解EnableDiscoveryClient,用于启动注册发现服务:
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);
}
}
- 增加一个提供http服务的controller类ProviderController:
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;
/**
-
@Description: 提供web服务的controller
-
@author: willzhao E-mail: zq2599@gmail.com
-
@date: 2019/7/28 11:08
*/
@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());
}
}
- 以上就是simple-provider的所有源码了,在pom.xml所在目录执行以下命令,即可构建docker镜像,存入本地仓库:
mvn compile jib:dockerBuild
制作服务消费者镜像
simple-consumer是个java web应用,启动后对外提供http服务,响应的时候,通过nacos取得simple-provider的地址,然后向simple-provider发请求,将响应返回给浏览器:
- 基于maven创建工程,其pom.xml内容如下:
<project xmlns=“http://maven.apache.org/POM/4.0.0”
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
- 配置文件application.properties,配置应用名称和nacos地址,注意这里nacos地址配置的是nacoshost,对应的是后面docker-compose.yml中的link参数:
spring.application.name=simple-consumer
spring.cloud.nacos.discovery.server-addr=nacoshost:8848
- 应用启动类SimpleConsumerApplication,配置了注解EnableDiscoveryClient,用于启动注册发现服务:
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);
}
}
- 增加一个提供http服务的controller类ConsumerController,通过LoadBalancerClient取得simple-provider的服务地址,然后发请求过去 :
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;
/**
-
@Description: 提供web服务的controller
-
@author: willzhao E-mail: zq2599@gmail.com
-
@date: 2019/7/28 11:08
*/
@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 + “
” + “response :” + result;
}
}
- 以上就是simple-consumer的所有源码了,在pom.xml所在目录执行以下命令,即可构建docker镜像,存入本地仓库:
mvn compile jib:dockerBuild
编写docker-compose.yml
三个镜像都准备好了,接下来是做容器编排,docker-compose.yml内容如下:
version: ‘2’
services:
nacos:
i
【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
mage: bolingcavalry/nacosserver:0.0.1
container_name: nacos
restart: unless-stopped