初学者微服务项目的搭建详细教程
服务治理: Spring Cloud Eureka
客户端负载均衡: Spring Cloud Ribbon
服务容错保护: Spring Cloud Hystrix
声明式服务调用: Spring Cloud Feign
API 网关服务:Spring Cloud Zuul
注意: 关于各大组件的说明这里就不一一描述,这里主要是搭建一个基础的springcloud项目的具体流程
首先要有一个SpringBoot项目,微服务项目是基于SpringBoot项目的,主要是由于SpringBoot项目可以不用写太多繁琐的配置文件,写过SSM的都体验过,那滋味。。。。
1.创建一个maven的moudle
2.导入pom文件导入相关依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
3.编写启动类
@SpringBootApplication
@EnableEurekaServer //标志这是一个注册中心
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
4.编写配置文件
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false #当前项目不注册服务
fetchRegistry: false #当前项目不需要发现服务
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
5.注册中心编写完成,直接访问:localhost+端口号
1.创建一个maven的moudle
2.导入pom文件导入相关依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
3.编写启动类
@SpringBootApplication
@EnableEurekaClient //注册服务
//@EnableDiscoveryClient //同上
public class HellowProvider {
public static void main(String[] args) {
SpringApplication.run(HellowProvider.class,args);
}
}
4.编写一个contrller
@RestController
public class HelloController {
@GetMapping("/provider/hello/first.do")
public String first(){
System.out.println("提供者:hhaha ");
return "测试";
}
}
5.编写配置文件
spring:
application:
name: HellowProvider #应用程序名
server:
port: 9094 #端口号
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/ #注册中心地址
6.启动注册服务,前往注册中心查看
1.创建一个maven的moudle
2.导入pom文件导入相关依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-openfeign
3.编写启动类
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class Custermer {
public static void main(String[] args) {
SpringApplication.run(Custermer.class,args);
}
}
4.编写接口
@FeignClient("HellowProvider")
public interface HelloService {
@GetMapping("/provider/hello/first.do")
String hello();
}
5.编写controller
@RestController
public class HellowController {
@Autowired
private HelloService helloService;
@GetMapping("/api/hello/first.do")
public String hellos(){
return helloService.hello();
}
}
6.编写配置文件
server:
port: 8901
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: HelloConsumer
7.启动查看注册情况
1.创建一个maven的moudle
2.导入相关依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
3.编写启动类
@SpringBootApplication
@EnableEurekaClient //注册服务
@RibbonClients //标志是Ribbon基于消费者
public class RibbionStart {
public static void main(String[] args) {
SpringApplication.run(RibbionStart.class,args);
}
}
4.编写service包中的接口
1.先把RestTemplate类注入进来
2.编写方法
参数:第一个参数是注册中心的提供者名字+提供者的访问url,第二个参数是返回值类型的class
@Service
public class HellowService {
@Autowired
private RestTemplate restTemplate;
public String num1(){
return restTemplate.getForObject("http://HellowProvider/provider/hello/first.do",String.class);
}
}
5.编写controller
@RestController
public class RibbonController {
@Autowired
private HellowService hellowService;
@GetMapping("/api/hello/num.do")
public String hello(){
return hellowService.num1();
}
}
6.编写一个配置类来配置负载均衡
@Configuration
public class RibbonConfig {
@Bean
@LoadBalanced //开启负载均衡
public RestTemplate createRT(){
return new RestTemplate();}
@Bean
public IRule create() {
// 选择负载均衡算法
// new RoundRobinRule();//轮询
// new WeightedResponseTimeRule();//权重
// new ZoneAvoidanceRule();//区域感知
// new BestAvailableRule();//分配当前并发量小的服务
return new RandomRule();//随机
}
}
7.编写配置文件
spring:
application:
name: Ribbon #应用程序名
server:
port: 8902 #端口号
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/ #注册中心地址
8.启动并查看是否注册
1.新建moudle
2.导入相关依赖
org.springframework.cloud
spring-cloud-starter-netflix-zuul
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
3.编写启动类
@SpringBootApplication
@EnableEurekaClient //注册服务
@EnableZuulProxy //启用zuul代理
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
}
4.编写配置文件
server:
port: 8903 #端口号
spring:
application:
name: Zuul #注册名字
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/ #注册中心地址
zuul:
routes:
servicel:
path: /hello/** #外界请求路径名称
service-id: Ribbon #服务名称 一般指的是消费者的名称 也可以是提供者的名称 这个名称需要和注册中心 一致
5.启动测试
注意:
用户发出的所有请求都是先经过zuul的
访问时其实还是访问的消费者的接口地址,只不过过滤了一下需要加一个配置文件中的请求路径的前缀而已,
1.创建一个moudle
2.导入相关依赖
org.springframework.cloud
spring-cloud-starter-netflix-hystrix
org.springframework.cloud
spring-cloud-starter-netflix-hystrixdashboard
3.编写启动类
@SpringBootApplication
@EnableHystrixDashboard //开启Hystrix
public class HystrixApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixApplication.class, args);
}
}
4.编写配置文件
server.port=9906 #这里只给一个端口号是为了看到效果
5.启动测试,看到野猪表示成功!localhost:9906/hystrix
1.在提供者的pom中导入hystrix的依赖
org.springframework.cloud
spring-cloud-starter-netflix-hystrix
注意:可能会缺少东西到时候视情况而定
2.在提供者的注解上加一个注解
@EnableCircuitBreaker启用熔断器监控
或者是使用:@EnableHystrix
4.、配置Servlet,Hystrix的数据采集 通过这个Servlet获取服务的状态 (HystrixMetricsStreamServlet)
@Configuration //标志是一个配置类
public class HystrixConfig {
@Bean
public ServletRegistrationBean registra(){
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
servletRegistrationBean.setServlet(new HystrixMetricsStreamServlet());
servletRegistrationBean.addUrlMappings("/actuator/hystrix.stream"); //查看监控的url
servletRegistrationBean.setName("hystrixMetricsStreamServlet"); //起一个名字
return servletRegistrationBean;
}
}
5.编写启动类
@SpringBootApplication
@EnableEurekaClient //注册服务
//@EnableDiscoveryClient //同上
@EnableHystrix //启用熔断器
public class HellowProvider {
public static void main(String[] args) {
SpringApplication.run(HellowProvider.class,args);
}
}
7.启动并测试(输入地址:http://localhost:9094/actuator/hystrix.stream )
如有不足之处,请各位大佬指点;