xmtrock
发布于 2021-06-29 / 258 阅读
0

Nacos2

服务发现

整个微服务架构中,整个系统会按职责能力划分多个服务,通过服务之间的写作实现业务目标。
在这个过程中无法避免的需要服务之间的远程调用。
在微服务环境中,由于服务运行实例的网络地址是不断动态变化的,服务实例数量的动态变化 ,因此无法使用固定的配置文件来记录服务提供方的网络地址,必须使用动态的服务发现机制用于实现微服务间的相互感知。各服务实例会上报自己的网络地址,这样服务中心就形成了一个完整的服务注册表,各服务实例会通过服务发现中心来获取访问目标服务的网络地址,从而实现服务发现的机制。

负载均衡

负载均衡就是将用户请求(流量)通过一定的策略,分摊在多个服务实例上执行,它是系统处理高并发、缓解网络压力和进行服务端扩容的重要手段之一。它分为服务端负载均衡和客户端负载均衡。
在负载均衡器中维护一个可用的服务实例清单,当客户端请求来临时,负载均衡服务器按照某种配置好的规则(负载均衡算法)从可用服务实例清单中选取其一去处理客户端的请求。这就是服务端负载均衡。
Ribbon,就属于客户端负载均衡。在ribbon客户端会有一个服务实例地址列表,在发送请求前通过负载均衡算法选择一个服务实例,然后进行访问,这是客户端负载均衡。即在客户端就进行负载均衡算法分配。

Feign

Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。Feign的英文表意为“假装,伪装,变形”, 可以理解为将HTTP报文请求方式伪装为简单的java接口调用方式。

服务发现中心例子(生产方、消费方)

<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

生产者:

server:
  port: ${port:56010}
spring:
  application:
    name: quickstart-producer
  #暂时只用得着服务发现,不需要配置那么多
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: ed22de1f-e63c-4947-8fae-641fe49aa556
        cluster-name: DEFAULT
logging:
  level:
    root: info
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ProducerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class, args);
    }
}
@RestController
public class ProducerController {
    @GetMapping("/service")
    public String service() {
        return "producer invoke;";
    }
}

消费者:

server:
  port: 56020
spring:
  application:
    name: quickstart-consumer
  #暂时只用得着服务发现,不需要配置那么多
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: ed22de1f-e63c-4947-8fae-641fe49aa556
        cluster-name: DEFAULT
logging:
  level:
    root: info
@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}
@FeignClient(value = "quickstart-producer") //生产者的名称
public interface ProducerClient {
    //注意是同名且同mapping
    @GetMapping("/service")
    public String service();
}
@RestController
@Slf4j
public class ConsumerController {
    @Autowired
    private ProducerClient producerClient;

    @GetMapping("/service")
    public String service() {
        log.info("consumer invoke;");
        String producerResult = producerClient.service();
        return "consumer invoke; || " + producerResult;
    }
}

多实例负载均衡。模拟地址动态(多端口):

server:
  port: ${port:56010}

然后修改VM option里为-Dport=56011
可以复制多个Configuration来模拟
20210629002924902