SpringCloudNetflix入门

一.了解SpringCloudNetflix

       SpringCloudNetflix是Netflix公司开发,又来加入spring并且集成到springClound,是springCloud的主要组件,SpringCloudNetflix可以为我们项目提供服务发现、断路器和监控、智能路由、客户端负载均衡等

可以参考下图

 组件介绍

  • Eureka,服务注册和发现,它提供了一个服务注册中心、服务发现的客户端,还有一个方便的查看所有注册的服务的界面。 所有的服务使用Eureka的服务发现客户端来将自己注册到Eureka的服务器上。
  • Zuul,网关,所有的客户端请求通过这个网关访问后台的服务。他可以使用一定的路由配置来判断某一个URL由哪个服务来处理。并从Eureka获取注册的服务来转发请求。
  • Ribbon,即负载均衡,Zuul网关将一个请求发送给某一个服务的应用的时候,如果一个服务启动了多个实例,就会通过Ribbon来通过一定的负载均衡策略来发送给某一个服务实例。
  • Feign,服务客户端,服务之间如果需要相互访问,可以使用RestTemplate,也可以使用Feign客户端访问。它默认会使用Ribbon来实现负载均衡。
  • Hystrix,监控和断路器。我们只需要在服务接口上添加Hystrix标签,就可以实现对这个接口的监控和断路器功能。
  • Bus, 消息总线,跨进程的通信机制,用于在上下游之间传递消息。
  • Sleuh,链路追踪,服务调用的线路监控
  • ....

二.Eureka的认识

          2.1介绍

                Eureka作用主要是注册和发现,它包含了EurekaServer 服务端(也叫注册中心)和EurekaClient客户端两部分组成,EurekaServer是独立的服务,而EurekaClient需要集成到每个微服务中。

简单的说就是帮助我们统一的管理通信地址

其他功能

        服务续约 微服务(EurekaClient)有定时(LeaseRenewalIntervalInSeconds:默认30s)发送 " 心跳"给Eureka的服务端,服务端通过是否有按时发送来判断微服务是否存在,如果连续三次未发送的话就会清楚该微服务,这个行为我们又叫做服务下线

        2.2java代码

                1.在springboot项目中导入依赖并创建子模块

 


  <!--1.管理 SpringCloud的jar包
  -->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <!--2.测试和小辣椒-->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>
  </dependencies>

        2.在eureka_service中导入springCloud的服务依赖

                注意:需要导web!! 导web!! 导web!!  -别问,问就是不知道 

  <dependencies>
		<!--spring-cloud-starter-netflix-eureka-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
       
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

        3.在eureka_service的启动类中加入

/
 * 注册中心启动类
 * @EnableEurekaServer : 开启EurekaServer服务端
 */
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication1010
{
    public static void main( String[] args )
    {
        SpringApplication.run(EurekaServerApplication1010.class);
    }
}

4.在eureka_service中配置yml

server:
  port: 1010  #端口自定义
eureka:
  instance:
    hostname: localhost #主机
  client: #客户端配置
    registerWithEureka: false  #EurekaServer自己不要注册到EurekaServer自己 ,只有EurekaClient才注册
    fetchRegistry: false  #EurekaServer不要拉取服务的通信地址列表 ,只有EurekaClient才拉取地址列表
    serviceUrl:  #注册中心的注册地址
      defaultZone: http://localhost:1010/eureka/  #http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    enable-self-preservation: false #关闭自我保护警告

5.测试启动--输入服务器地址能进入下面页面就说明成功啦!  

是成功了三分之一啦 嘿嘿

下面我们开始配置eurekaClient

        1.在eureka_user中导入依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

         2.启动类

/
 * 用户的启动类
 * @EnableEurekaClient: 标记该应用是 Eureka客户端
 */
@SpringBootApplication
@EnableEurekaClient
public class UserServerApplication1020
{

    public static void main( String[] args )
    {
        SpringApplication.run(UserServerApplication1020.class);
    }
}

        3.yml配置

#注册到EurekaServer
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:1010/eureka/
  instance:
    prefer-ip-address: true #使用ip地址进行注册
    instance-id: user-server:1020	#实例ID
spring:
  application:
    name: user-server
server:
  port: 1020

        4.测试

                先启动eureka_serv后再启动eureka_user

        

这里就可以显示了就说明配置成功了 eureka_order也是一样的配置这里就省略了

2.3实现服务通信

        1.搭建公共模块user_comm

在user_comm中创建domain对象

@Data
public class User {
    private Long id;
    private String username;
    private String desc;

}

         2.在eureka_user和eureka_order模块中导入user_comm模块

<dependency>
     <groupId>cn.zs.springboot</groupId>
     <artifactId>user_common</artifactId>
     <version>1.0-SNAPSHOT</version>
</dependency>

        3.编写eureka_user模块的控制层

//用户服务:暴露接口给订单访问
@RestController
public class UserController {

 

    //订单服务来调用这个方法      http://localhost:1020/user/10
    // @GetMapping(value = "/user/{id}" )
    @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
    public User getById(@PathVariable("id")Long id){
        //根据id去数据库查询User
        
        return  new User(id,"zs:"+id,"我是zs");
    }
}

        4.在eureka_order模块的启动类中说明RestTemplate

 //配置一个RestTemplate ,Spring封装的一个机遇Restful风格的http客户端 工具
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

        5.编写eureka_order模块的控制层


//订单服务
@RestController
public class OrderController {

    //需要配置成Bean
    @Autowired
    private RestTemplate  restTemplate ;

    //浏览器调用该方法
    @RequestMapping(value = "/order/{id}",method = RequestMethod.GET)
    public User getById(@PathVariable("id")Long id){
        //发送http请求调用 user的服务,获取user对象 : RestTemplate
        //目标资源路径:user的ip,user的端口,user的Controller路径
        String url = "http://localhost:1020/user/"+id;
       
        //发送http请求
        return restTemplate.getForObject(url, User.class);

    }
}

        6.测试

到这里就大功告成啦,如果想继续学习集群就请继续往下看


2.4服务集群 

        大家可能刚接触的时候会有一些蒙圈或者感觉服务集群会有难度,其实能这里给大家的集群是非常简单的,只需要在我们上面的代码做一点小小的修改即可

        1.修改eureka_user中的yml配置

        我们只需要更改两个地方即可 1.实例ID  2. 端口号

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:10010/eureka/
  instance:
    instance-id: user-server1  #实例ID -- 更改为不一致的
spring:
  application:
    name: user-server
server:
  port: 1031 #端口号 -- 更改为不一致的

        2.在order中导入Ribbn依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

        3.修改eureka_order的控制层

         1. 注入port

          2. 将之前写的 localhost:端口 改为 eureka_user中配置的服务名

 application:
    name: user-server  

@RestController
public class OrderController {

    //需要配置成Bean
    @Autowired
    private RestTemplate  restTemplate ;

    //浏览器调用该方法
    @RequestMapping(value = "/order/{id}",method = RequestMethod.GET)
    public User getById(@PathVariable("id")Long id){
        //发送http请求调用 user的服务,获取user对象 : RestTemplate
        //user的ip,user的端口,user的Controller路径
        //String url = "http://localhost:1020/user/"+id;
        String url = "http://user-server/user/"+id;

        //发送http请求
        return restTemplate.getForObject(url, User.class);

    }
}

        4.在eureka_user的启动类点击配置

   PS: 只改eureka_user

我是22版本ieda,可能其他版本位置不一样

 勾选上即可

         5.我们现在只需要在第一次启动eureka_user之后,更改yml配置中的 实例ID 和端口 再次启动就是不一样的地址啦

        赶紧去试试吧!!

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值