SpringCloud Netflix Eureka 注册中心

前面我们讲了Nacos 作为注册中心的使用方法,Eureka的使用方法则更为简便,而结合RestTemplate 和Feign进行远程调用则几乎相同。

首先创建一个eureka-server项目作为注册中心服务。

引入依赖

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Finchley.RC2</spring-cloud.version>
	 </properties>


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

	<dependencyManagement>
	    <dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

启动类加注解@EnableEurekaServer

配置文件


server:
  port: 8081
eureka:
  instance:
    hostname: 127.0.0.1
  client:
    register-with-eureka: false 
    fetch-registry: false 
    service-url:  
      defaultZone: http://127.0.0.1:8081/eureka/
  
spring:
  application:
    name: service-01

启动项目,访问http://127.0.0.1:8081

创建provider项目,引入依赖

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

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

启动类加注解:@EnableEurekaClient

配置文件配置注册中心server的地址:

eureka:
  client:
    serviceUrl: #注册中心地址
      defaultZone: http://127.0.0.1:8081/eureka/
    healthcheck: #开启健康检查 ,手动改变客户端状态
      enabled: true

server:
  port: 8082
spring:
  application:
    name: service-02




创建consumer项目,启动类添加注解@EnableFeignClients

引入依赖

	<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

配置文件配置注册中心地址:

server:
  port: 8083
eureka:
  client:
    service-url: #注册中心地址
      defaultZone: http://127.0.0.1:8081/eureka/
spring:
  application:
    name: service-consummer

启动项目provider和consumer,成功注册到注册中心:

整合RestTemplate 进行远程调用和nacos 没有区别。今天我们采用整合feign的方式进行调用。

在provider项目中创建controller,作为提供者

@RestController
public class Controller{
    
    @GetMapping("/getUser")
    public Map<String,Object> getUser(Integer id){
        Map<String,Object> data = new HashMap<>();
        data.put("id",id);
        data.put("userName","admin");
        data.put("from","provider-A");
        return data;
    }
     /**
     *GET方法中,@RequestParam()接收引用类型参数
     */
    @GetMapping("/getMap")
    public Map<String,Object> getMap(@RequestParam() Map<String, Object> map){
        Map<String,Object> data = new HashMap<>();
        data.put("id",map.get("id"));
        data.put("userName",map.get("name"));
        data.put("from","provider-A");
        return data;
    }
    /**
     *POST方法中,@RequestBody接收引用类型参数
     */
    @PostMapping("/postMap")
    public Map<String, Object> postMap(@RequestBody Map<String, Object> map) {
        Map<String,Object> data = new HashMap<>();
        data.put("id",map.get("id"));
        data.put("userName",map.get("name"));
        data.put("from","provider-A");
        return data;
    }
}

在consumer中添加feign依赖

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

根据provider中提供者的API创建接口,作为服务调用,并通过添加注解@FeignClient的形式引入Feign

@FeignClient(name="service-02")
public interface UserApi{
    /**
     * GET方法,有参数,必须添加@RequestParam()注解
     */
    @GetMapping("/getUser")
    public Map<String,Object> getUser(@RequestParam("id") Integer id);

    @GetMapping("/getMap")
    public Map<String,Object> getMap(@RequestParam() Map<String,Object> map);

    /**
     * POST方法,无需@RequestParam()
     */
    @PostMapping("/postMap")
    Map<String, Object> postMap(Map<String, Object> map);
}

创建Controller

@RestController
public class Controller{

    @Autowired
    UserApi userApi;

    @RequestMapping("/getUser")
    @ResponseBody
    public Map<String,Object> getUser(){
        final Map<String, Object> user = userApi.getUser(100);
        return user;
    }

    @RequestMapping("/getMap")
    @ResponseBody
    public Map<String,Object> getMap(){
        HashMap<String, Object> map1 = new HashMap<>(2);
        map1.put("id", "3000");
        map1.put("name", "ccc");
        final Map<String, Object> integerStringMap = userApi.getMap(map1);
        return integerStringMap;
    }
    @RequestMapping("/postMap")
    @ResponseBody
    public Map<String,Object> postMap(){
        HashMap<String, Object> map1 = new HashMap<>(2);

        map1.put("id", "2000");
        map1.put("name", "凯");
        final Map<String, Object> integerStringMap = userApi.postMap(map1);
        return integerStringMap;
    }
}

访问http://127.0.0.1:8083/getMap

调用成功

自行测试其他接口。

我们看到,当provider中出现提供调用的接口的时候,只要我们在consumer中添加相同的API即可。这样的好处是如果我们做跨语言的异构平台,则会很方便。

但是如果我们的服务都是java语言,这种consumer中的硬编码则看起来并不是那么方便。

我们可以将provider中可提供调用的方法单独抽象出一个API服务,然后打包下发到提供者和消费者项目中。使用时同Dubbo一样,只需要引入相应接口。

1.创建API项目,创建API接口。

install项目,并在provider和consumer中引入该项目。

在provider端,提供服务的Controller类实现 Api接口,重写getApi()方法:

consumer端的 Feign接口继承Api接口:

controller中直接调用getApi()

访问http://127.0.0.1:8083/getApi

成功返回

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值