IT@程序员猿媛

Spring Cloud 构建微服务示例项目

2020-08-11  本文已影响0人  敬亭阁主

基本结构

Eureka监控界面

EurekaServer

本身也是一个SpringBoot应用,启动后成为服务注册中心,支持多节点集群,本示例使用单节点。

配置文件 application.properties

# 设置spring应用命名,可以自定义,非必要
spring.application.name=eureka-server
# 设置Eureka Server WEB控制台端口,自定义
server.port=8761

#是否将自己注册到Eureka-Server中,默认的为true
eureka.client.registerWithEureka=false
#是否从Eureka-Server中获取服务注册信息,默认为true
eureka.client.fetchRegistry=false

Maven依赖

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

启动注解

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

HelloWorldService

实际上这个服务就是一个标准的SpringBoot Web应用,可以部署多个,使用时由注册中心按指定规则进行选择。

配置文件 application.properties

# 对外提供Web服务的端口号
server.port=8762

# 服务注册ID,使用该ID可以从注册中心获取服务实例
spring.application.name=hello-world-service

# 要注册到的注册中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

Maven依赖

<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>

服务代码

@RestController
@SpringBootApplication
public class HelloWorldApplication {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String sayHello() {
        return "Hello guy!";
    }

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

DemoConsumer

这个应用和之前的HelloWorldService应用在配置和Maven依赖上基本一致,区别就是在代码中增加了从注册中心获取服务实例的部分。

使用DiscoveryClient获取服务实例

@Autowired
private DiscoveryClient discoveryClient;

/**
  * 调用DiscoveryClient获取服务实例列表,取第一个服务实例
  * @return
  */
@RequestMapping(value = "/discovery", method = RequestMethod.GET)
public String discoveryHello() {
    ServiceInstance si = this.discoveryClient.getInstances(serviceId).get(0);
    return sayHello(si);
}

使用LoadBalancerClient获取服务实例

    /**
     * ribbon负载均衡器,其中记录了从Eureka Server中获取的所有服务信息。
     * 这些服务的信息是IP和端口等。应用名称,域名,主机名等信息。
     */
    @Autowired
    private LoadBalancerClient loadBalancerClient;

    /**
     * 调用LoadBanlanceClient获取服务实例,choose策略见配置文件
     * @return
     */
    @RequestMapping(value = "/balance", method = RequestMethod.GET)
    public String balanceHello() {
        ServiceInstance si = this.loadBalancerClient.choose(serviceId);
        return sayHello(si);
    }

ribbon选择策略可以在配置文件中进行配置,注意是按服务进行单独策略配置的

# 设置负载均衡策略
hello-world-service.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

其它

这三个应用由于存在依赖关系,因此启动需要按顺序,首先需要启动EurekaServer,然后启动HelloWorldService注册服务,最后启动DemoConsumer。

源码已上传到码云:com.apollo.microService.demo

上一篇 下一篇

猜你喜欢

热点阅读