首先感谢下我的老师,从老师那边整理了这么多内容;
学习了Spring Cloud分享下自己学习心得,也建议大家学习的时候尽量不要按照老师或者其他人的内容进行复制,因为这样会少了自己思考;我在这里做了一个最简单的例子的笔记分享给大家,如果有想法的,大家可以一起交流学习。
首先我要建议大家,学习一些东西,一定要看官网,因为官网的东西是最权威的,最全面的。spring cloud 尽量去看英文的,因为翻译过来的可能会有理解上的偏差,看不懂也没关系,一点点的来,慢慢的就可以看懂了。
spring cloud 官网
英文文档: http://projects.spring.io/spring-cloud/
环境: jdk1.8 编辑器用的 idea
文章目录:
- 添加maven依赖
- 创建server工程
- 创建config工程
- 创建city工程(业务工程)
- 创建feign测试工程
- 创建zuul测试工程
简单介绍下各个工程大概的作用。
server 大家一看名字就能感觉个大概,这是个注册中心,用过dubbo+ZK的可能一下就理解了,server和ZK的作用差不多。所有的服务启动后,都会在注册中心有一个体现,而且注册中心也有可视化界面,会看的比较直观一点。
config工程,是提供了一个集中化配置的地方,然后可用git进行配置,也可以用本地的配置文件,要注意的是配置文件的命名规则,我就在命名规则吃了大亏,纠结了好长时间呢,当然,如果只是测试的话,这块基本可以忽略了。
city 工程,就是自己的业务工程,然后这里可以集成mybatis或者hibernate写入自己的业务,接口之类的内容。
feign 工程,介绍了如何在各个服务之间进行通讯,当然通讯的方式有很多中,http,webservice等等都可以,然后,我感觉这种方式是相对比较简便的。
zuul 工程,这里是一个网关的作用,充当nginx的作用。
创建maven工程
创建maven工程 名字是 spring-cloud-demo 然后修改pom.xml文件
我们打开英文文档 点击 Quick Start 就可以看到下面这些内容。
很简单的将这些复制到工程中,然后就可以进行jar的下载了,经过一段时间后,jar包就下载好了。
创建server工程 eureka-server
在 spring-cloud-demo 项目中添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
然后在resources文件中添加 application.properties 或者 application.yml
我这边用的application.properties
server.port: 8761
#主机名称
eureka.instance.hostname: localhost
#禁用客户端功能
eureka.client.registerWithEureka: false
#禁用客户端配置
eureka.client.fetchRegistry: false
eureka.client.serviceUrl.defaultZone:http://${eureka.instance.hostname}:${server.port}/eureka/
eureka.server.enable-self-preservation=false
接下来创建一个Application.java文件
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
用main方法直接启动即可;
启动成功之后访问 http://localhost:8761 如下server工程就启动成功了;
创建config工程 config-server
在config-server的pom.xml文件中添加如下
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
然后在resources文件夹下继续创建 application.properties文件
spring.application.name: config-server
server.port= 8888
eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
#配置git文件
#spring.cloud.config.server.git.uri= git地址
#spring.cloud.config.server.git.searchPaths= 路径
###配置文件在本地
spring.profiles.active=native
#配置文件的目录
spring.cloud.config.server.native.search-locations: classpath:/config
然后再创建config文件夹在此文件夹下面创建配置文件信息,我们先创建一个city-eureka-dev.properties 以便于下面city-eureka用
然后里面随便写入一些配置信息 , 如下:
message=aaasdsds
接下来创建Application.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
启动成功之后,在就会在localhost:8761中看到已经配置好的config-server
想看一下这个配置文件有没有生效可以访问 http://localhost:8888/city-eureka/dev
你可以根据我给出我给出的地址,找到访问路径的规律。
创建city工程(业务工程) city-eureka
pom文件中没有变动,创建application.properties文件,dev是根据config-server中city-eureka-dev.properties 文件名配置的;
spring.application.name: city-eureka
eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
server.port=8081
spring.cloud.config.profile=dev
/{application}/{profile}/[label]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
其中{label}是指分支,默认是master。
根据以上进行命名;
编写一个controller
完成之后进行启动,启动的时候看好如下信息, 说明注册了config配置。
如上已经正常注册,根据controller的内容 我们访问 http://localhost:8081/bb
访问成功;到此配置完成;
创建feign测试工程
先添加jar依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在application.properties 文件中配置信息
spring.application.name: client-feign
eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
server.port:8082
feign.client.config.feignName.connectTimeout: 5000
feign.client.config.feignName.readTimeout: 5000
创建 CityClient.java @FeignClient 中应该写要访问的spring.application.name 的值
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient("city-eureka")
public interface CityClient {
@GetMapping("/bb")
String bb();
}
然后创建 CityController
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.waylau.spring.cloud.weather.service.CityClient;
@RestController
public class CityController {
@Autowired
private CityClient cityClient;
@GetMapping("/bb")
public String listCity() {
// 通过Feign客户端来查找
String body = ();
return body;
}
}
要注意一点 Application.java 中要比一般的多一个注解 @EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在注册中心看到信息之后说明注册成功;
访问 http://localhost:8082/bb 测试是否可以访问成功;
创建zuul测试工程 client-zuul
添加maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
然后添加application.properties 下面serverId 要写要代理的spring.application.name的value
spring.application.name: client-zuul
eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
server.port=8083
zuul.routes.hi.path: /hi/**
zuul.routes.hi.serviceId: client-feign
这里的Application.java 需要添加一个注解 @EnableZuulProxy
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
启动成功之后,在注册中心查看是否注册成功;
那么我们现在访问 http://localhost:8083/hi/bb 或者在 client-feign 中随便创建一个Controller 进行访问即可;
我工程的地址:https://gitee.com/feelMonkey/Spring-Cloud-Demo.git
只要努力,也许有一天,我们会变成我们一直佩服的那种人。