Spring Cloud实战(一):Eureka实现微服务注册与微服务间调用(注意不是zuul进行URL路由)

没有Spring Cloud,Spring Boot的实用性要大打折扣。

单个微服务虽然开发简单、维护方便,但是没有协作功能的微服务,其实在企业里并没有显著的竞争力,跟NodeJS比起来,JAVA开发微服务并没有多大的优势。

但是有了Spring Cloud,将多个微服务协作起来工作,充分发挥JAVA在分布式计算的优势,那么改变的不仅仅是开发的方式,而是整个服务框架与计算模式的设计方式。

在Spring Cloud里,负责微服务注册与发现的项目是Spring Cloud Netflix项目中的Eureka组件。Eureka分为两大部分,Eureka Server与Eureka Client。很显然,Eureka Server负责管理、协调所有的微服务提供者,即Eureka Client,因此我们要使用创建协作的微服务框架,首先必须创建Eureka Server。

1. 创建Eureka Server

创建Euraka Server最简单的方式莫过于使用SPRING INITIALIZR,配置好基本的项目源数据后,依赖仅仅需要选中“Eureka Server”即可。

在具体的实践中,一定要记得在Spring Boot的启动主类上添加“@EnableEurekaServer”注解,如下:

@SpringBootApplication
//  千万不可忘记此注解,否则出现404错误
@EnableEurekaServer
public class MiranaEurekaApplication {

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

将默认的配置文件application.properties改为application.yml,添加如下内容:

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    # 以下两项一定要是false,表明自己是服务器,而不需要从其他主机发现服务
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    waitTimeInMsWhenSyncEmpty: 0

现在即可启动MiranaEurekaApplication,访问http://localhost:8761即可进入服务的状态管理页面。

2. 创建Eureka Client

依旧采用SPRING INITIALIZR,只不过此次依赖选择“Eureka Discovery”,依旧导入maven项目,在主类上添加“@EnableEurekaClient”注解,如下:

@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableEurekaClient
@RestController
public class MiranaAssetApplication {

    @RequestMapping("/")
    public String home() {
        return "Spring Cloud实战";
    }


    public static void main(String[] args) {
        new SpringApplicationBuilder(MiranaAssetApplication.class).web(true).run(args);
    }
}

配置文件application.yml的内容很简单,只需要指定一个不一样的服务器端口即可,如下:

server:
  port: 8080

eureka:
  serviceUrl:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: ASSET

此外,为了便于服务的发现,强烈建议添加“spring.application.name”属性,这也是注册的服务ID,也是以后其他微服务端能调用本服务的识别ID。

现在启动MiranaAssetApplication,就会发现此服务已被注册与发现,见下图。 
微服务注册

3. 启动多个微服务实例

为了提高服务的健壮性,对于每个微服务,我们可以启动多个实例,对服务的使用者而言,它们是一个统一的整体,唯一能识别它们的就是服务ID,即spring.application.name配置项(不区分大小写),如我们将WEAK服务启动两个实例,如下图: 
多个微服务实例

4. 进一步测试

我们使用微服务的目的在于协作多个服务接口共同工作,所以我们还应该创建其他的微服务程序,如果简单点,可将上述的微服务程序的服务端口改为8081,而且服务ID改为不一样,即可进行简单测试

5. 发现服务与消费服务

在spring-cloud中,客户发现与消费服务主要依靠com.netflix.discovery.EurekaClient与org.springframework.web.client.RestTemplate . EurekaClient主要用来获取所要调用的方法所在的实例的url地址, RestTemplate进行服务调用(其实就是Spring框架封装的http请求,超实用).示例如下:

@RequestMapping("/test")
@RestController
public class TestEureka {
    
    private RestTemplate restTemplate=new RestTemplate();//不能用注入的方式因为这个没有定义为spring管理的bean

    @Autowired
    private EurekaClient eurekaClient;
    @RequestMapping(value="/get",method=RequestMethod.GET)
    private String findGet(){
        InstanceInfo nextServerFromEureka = eurekaClient.getNextServerFromEureka("ASSET", false);//ASSET为定义的应用名
        String url=nextServerFromEureka.getHomePageUrl()+Constants.ASSET_GET; // 后面常量为自定义的方法路径
        String result = restTemplate.exchange(url, HttpMethod.GET, null, String.class).getBody();
        System.out.println(result);
        return result; 
    }
    public static void main(String[] args) {
        TestEureka test = new TestEureka();
        test.findGet();
    }
    
}
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值