SpringCloud全家桶

Eureka(服务发现组件)

1、什么是服务发现?

2、服务发现方式

3、服务发现组件 Eureka

Eureka Netflflix 开发的服务发现框架, SpringCloud 将它集成在自己的子项目 spring-cloud-netflflix 中,实现
SpringCloud 的服务发现功能。 Eureka 包含两个组件: Eureka Server Eureka Client
  • Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中 的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
  • Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就别一个内置的、使用轮 询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒, 如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个 服务节点移除(默认90)

3.1、Eureka服务端开发

1 )创建 ihrm_eureka 模块
2 )引入依赖 父工程 pom.xml 定义 SpringCloud 版本
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

(3)ihrm_eureka模块pom.xml引入eureka-server

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

(4)ihrm_eureka模块添加application.yml

server:
  port: 6868 #服务端口
eureka:
  client:
    registerWithEureka: false #是否将自己注册到Eureka服务中,本身就是所有无需
注册
    fetchRegistry: false #是否从Eureka中获取注册信息
    serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址
      defaultZone: http://127.0.0.1:${server.port}/eureka/

(5)ihrm_eureka模块配置启动类

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer.class, args);
    }
}

3.2、Eureka客户端(微服务注册)

我们现在就将所有的微服务都注册到 Eureka 中,这样所有的微服务之间都可以互相调用了。
(1)将客户端(即调用服务模块)的pom.xml添加依赖
<dependency>        
 <groupId>org.springframework.cloud</groupId>            
 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>         
</dependency>
2 )修改每个微服务的 application.yml ,添加注册 eureka 服务的配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:6868/eureka
  instance:
    prefer-ip-address: true
3 )修改每个服务类的启动类,添加注解

简单的说,ribbon是直接通过微服务的地址调用服务,Feign是通过调用接口来进行调用服务

Ribbon(客户端负载均衡器)

(1).导入maven

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

(2).创建一个RestBean注入RestTemplate,不直接注入到controller层的原因是:我们还会为RestTemplate注入其他的属性

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

//这个注解表示将这个类注入到spring boot的容器中
@Configuration
public class RestBean {

    @Bean
    @LoadBalanced
    //这个注解是Ribbon使用负载均衡的注解
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }

}

(3).创建controller层,调用生产者服务

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;

@RestController
public class RibbonController {
    //此处的请求前缀是微服务提供者的服务名称,相当于localhost:8080
    private static final String producter_url = "http://productor";

    /**
     * 使用 使用restTemplate访问restful接口非常的简单粗暴无脑。 (url, requestMap,
     * ResponseBean.class)这三个参数分别代表 REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。
     */
    @Autowired
    private RestTemplate restTemplate;


    @RequestMapping(value = "/consumer/dept/list")
    public List<String> list()
    {
        return restTemplate.getForObject(producter_url + "/show", List.class);
    }

}

Feign(微服务调用组件)

Feign 是简化 Java HTTP 客户端开发的工具( java-to-httpclient-binder ),它的灵感来自于 Retrofifit JAXRS-2.0
WebSocket Feign 的初衷是降低统一绑定 Denominator HTTP API 的复杂度,不区分是否为 restful
 
1、使用体验
我们现在在系统微服务调用企业微服务的方法(根据 ID 查询部门)
(1 )在 ihrm_system 模块添加依赖
<dependency>        
 <groupId>org.springframework.cloud</groupId>            
 <artifactId>spring-cloud-starter-openfeign</artifactId>            
</dependency
2 )修改 ihrm_system 模块的启动类,添加注解
@EnableDiscoveryClient
@EnableFeignClients
3 )在 Ihrm_system 模块创建 com.ihrm.system.client 包,包下创建接口
 
//@FeignClient注解用于指定从哪个服务中调用功能 ,注意里面的名称与被调用的服务名保持一致
@FeignClient(value = "ihrm-company")
public interface DepartmentFeignClient {
    //@RequestMapping注解用于对被调用的微服务进行地址映射
    @RequestMapping(value = "/company/departments/{id}/", method = RequestMethod.GET)
    public Department findById(@PathVariable("id") String id) throws Exception; }
4 )修改 Ihrm_system 模块的 UserController
@Autowired    
 private DepartmentFeignClient departmentFeignClient;    
 
 //测试通过系统微服务调用企业微服务方法
 @RequestMapping(value = "/test/{id}")    
    public void findDeptById(@PathVariable  String id){    
   Department dept = departmentFeignClient.findById(id);  
        System.out.println(dept);        
 }
5 )ihrm_common配置 Feign 拦截器添加请求头
注:为什么要加Feign拦截器呢?
 
/**
* FeignConfiguration 过滤器,配置请求头信息
*/
@Configuration
public class FeignConfiguration {
    @Bean
    public RequestInterceptor requestInterceptor() {
        return new RequestInterceptor() {
            @Override
            public void apply(RequestTemplate template) {
                ServletRequestAttributes attributes = (ServletRequestAttributes) 
RequestContextHolder
                       .getRequestAttributes();
                if (attributes != null) {
                    HttpServletRequest request = attributes.getRequest();
                    Enumeration<String> headerNames = request.getHeaderNames();
                    if (headerNames != null) {
                        while (headerNames.hasMoreElements()) {
                            String name = headerNames.nextElement();
                            String values = request.getHeader(name);
                            template.header(name, values);
                       }
                   }
               }
           }
       };
   }
}

 

Hystrix(超时机制、断路器模式)

Turbine(集群服务监控)

Zuul(服务网关)

Sidecar(支持异构平台的微服务)

Spring Cloud Config(统一管理配置)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值