springcloud学习03-spring cloud eureka(下)

Posted 话祥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springcloud学习03-spring cloud eureka(下)相关的知识,希望对你有一定的参考价值。

7.配置服务提供者(生产者)

  7.1.配置resources/application.yml.

    值eureka.client.service-url(或serviceUrl).defaultZone是配置将服务注册到那个注册中心,server.port是自己服务占用的端口,spring.application.name是服务在注册中心的名字,需要是唯一的,见7.2下图:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8888/eureka/
server:
  port: 8889
spring:
  application:
    name: server-provider

  7.2.在启动入口类上加入注解@EnableEurekaClient,然后启动,刷新localhost:8888,可以看到这个服务。

  7.3.用postman测试这个服务,在启动类上加注解@RestController(sprig中注解constroller与responsebody的合体),测个返回hello world!的接口(一个服务)。EurekaProviderApplication.java文件

package com.springcloud.eurekaprovider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaProviderApplication {

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

    @RequestMapping("/hello")
    public String home() {
        return "hello world! ";
    }



}

  postman选择get/post请求,然后输入localhost:8889/hello发送请求能看到hello world!就说明服务时可用的

8.陪服务的消费者

  8.1.打开pom文件,添加几个新的依赖,我看到有说spring-cloud-starter-eureka这个包被官方放弃了,和spring-cloud-starter-netflix-eureka-server推荐用作个包,我这里都加进来了,参考的文章是这样的,等下成功了,我去掉试一下。(参考文章:https://blog.csdn.net/zhou199252/article/details/80745151

    <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
            <version>1.4.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

  8.2.配置resources/application.yml.各个含义与配置生产者哪里一个意思。

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8888/eureka/
server:
  port: 8887
spring:
  application:
    name: server-customer

  8.3.启动入口类中加入注解:@EnableDiscoveryClient.启动服务,然后刷新eureka注册中心可以到这个服务。(这个和我想的不一样呀服务消费者不应该在这一呀

  8.4.用postman进行测试,在启动类中加入restTemplate以消费相关的服务。

启动类中加入restTemplate,注解@LoadBalanced是开启负载均衡,具体解释https://blog.csdn.net/u011063112/article/details/81295376

这个restTemplate可以在service时在创建(new),测试时可以这样,但是在工程中可能到处在用,所以启动时就加入容器中,通过依赖注入的方式调用。

package com.springcloud.eurekacustomer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
public class EurekaCustomerApplication {

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

    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }


}

简单测试,增加HelloController.java和HelloService.java文件。

目录结构

 

package com.springcloud.eurekacustomer;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class HelloService {

    @Autowired
    RestTemplate restTemplate;

    public String helloService(){
        String rltStr = restTemplate.getForObject("http://server-provider/hello",String.class);
        rltStr = rltStr + " form service-provider by service-customer.";
        return rltStr;
    }


}
package com.springcloud.eurekacustomer;

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

@RestController
public class HelloController {

    @Autowired
    HelloService helloService;

    @RequestMapping("/cushello")
    public String hello(){
        return helloService.helloService();
    }

}

  用postman测试的结果如下,

  8.5.关于消费者是否用在注册中心中注册吗?

  查了一下没有找到相关的解释,先放着吧。

  8.6.总结。

通过这个调用过程可以看出来,他与dubbo有一个不同时,customer的调用并没有依赖provider相关的代码即jar,这样开发中就不需要频繁的更新jar包了。

  

以上是关于springcloud学习03-spring cloud eureka(下)的主要内容,如果未能解决你的问题,请参考以下文章

Eureka 系列(03)Spring Cloud 自动装配原理

springcloud~gateway网关

SpringCloud之注册中心

springcloud之Feign伪装

springcloud中provider-product依赖

springcloud笔记三注册中心eurekazookeeperconsul