关于初学者怎么搭建微服务项目的详细教程

初学者微服务项目的搭建详细教程

微服务常用的常用组件

服务治理: Spring Cloud Eureka
客户端负载均衡: Spring Cloud Ribbon
服务容错保护: Spring Cloud Hystrix
声明式服务调用: Spring Cloud Feign
API 网关服务:Spring Cloud Zuul

微服务搭建步骤

  1. 搭建注册中心Eureka
  2. 搭建提供者
  3. 搭建消费者Feign
  4. 搭建zuul
  5. 搭建熔断器Hystrix

注意: 关于各大组件的说明这里就不一一描述,这里主要是搭建一个基础的springcloud项目的具体流程

搭建springBoot项目

首先要有一个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.启动查看注册情况

基于Ribbon+RestTemplate的消费者

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.启动并查看是否注册

搭建Zuul

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的
	访问时其实还是访问的消费者的接口地址,只不过过滤了一下需要加一个配置文件中的请求路径的前缀而已,

搭建熔断器Hystrix

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 )

如有不足之处,请各位大佬指点;

你可能感兴趣的:(java)