SpringCloud服务发现Eureka

栏目: Java · 发布时间: 7年前

内容简介:案例中有三个角色:服务注册中心、服务提供者、服务消费者,流程是首先启动注册中心,服务提供者生产服务并注册到服务中心中,消费者从服务中心中获取服务并执行。其中我们分别使用到Spring Cloud Netflix中的Eureka作为服务发现,而服务提供者和服务消费者均为Spring Boot提供的Restful接口。
编辑推荐:
本文来自于简书,本文主要介绍了如何使用到Spring Cloud Netflix中的Eureka进行接口配置和服务调用,希望对您的学习有所帮助。

案例中有三个角色:服务注册中心、服务提供者、服务消费者,流程是首先启动注册中心,服务提供者生产服务并注册到服务中心中,消费者从服务中心中获取服务并执行。

SpringCloud服务发现Eureka

其中我们分别使用到Spring Cloud Netflix中的Eureka作为服务发现,而服务提供者和服务消费者均为Spring Boot提供的Restful接口。

而Feign则作为调用实现

(Feign是一个声明式Web Service客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。)

部署服务发现Eureka

首先创建Maven项目,并在pom文件里配置所需的依赖。以下是我的服务发现配置文件。

<?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.eureka</groupId>
 <artifactId>demo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>
 <name>spring-cloud-eureka</name>
 <description>Demo project for Spring Boot</description>
 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.0.0.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 <spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version>
 </properties>
 <dependencies>
 <dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 </dependency>
 </dependencies>
 <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>
 <build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
 </plugins>
 </build>
 <repositories>
 <repository>
 <id>spring-snapshots</id>
 <name>Spring Snapshots</name>
 <url>https://repo.spring.io/snapshot</url>
 <snapshots>
 <enabled>true</enabled>
 </snapshots>
 </repository>
 <repository>
 <id>spring-milestones</id>
 <name>Spring Milestones</name>
 <url>https://repo.spring.io/milestone</url>
 <snapshots>
 <enabled>false</enabled>
 </snapshots>
 </repository>
 </repositories>
 </project>
 

然后更新Maven依赖,然后在入口文件添加@EnableEurekaServer注解

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBoot

Application;

import org.springframework.cloud.netflix.eureka.server.

EnableEurekaServer;

@SpringBootApplication

//启用服务注册服务

@EnableEurekaServer

public class SpringCloudEurekaApplication {

public static void main(String[] args) {

SpringApplication.run(SpringCloudEurekaApplication.

class, args);

}

}

配置application.properties文件

server.port=8000

eureka.client.register-with-eureka=false

eureka.client.fetch-registry=false

eureka.client.serviceUrl.defaultZone=

http://localhost:8000/eureka/

SpringCloud服务发现Eureka

SpringCloud服务发现Eureka

配置好配置文件之后就可以,启动服务发现服务了。配置文件中详细的提供了服务发现的地址。

然后访问http://localhost:8000/显示以下页面表示启动成功了。

SpringCloud服务发现Eureka

部署服务提供者

创建Maven项目,并在pom文件里配置所需的依赖。以下是我的服务提供者配置文件。

<?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.example</groupId>
 <artifactId>demo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>
 <name>spring-cloud-producer</name>
 <description>Demo project for Spring cloud producer</description>
 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>1.5.3.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 <spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
 </properties>
 <dependencies>
 <dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-eureka</artifactId>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 </dependency>
 </dependencies>
 <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>
 <build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
 </plugins>
 </build></project>
 

然后更新Maven依赖,然后在入口文件添加@EnableEurekaClient注解,声明这个一个服务提供者。

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBoot

Application;

import org.springframework.cloud.netflix.eureka.

EnableEurekaClient;

@SpringBootApplication

@EnableEurekaClient

public class SpringCloudProducerApplication {

public static void main(String[] args) {

SpringApplication.run(SpringCloudProducerApplication.

class, args);

}

}

配置application.properties文件

#指定微服务的名称后续在调用的时候只需要使用该

名称就可以进行服务的访问

spring.application.name=spring-cloud-producer

#配置端口号

server.port=9000

#服务注册中心的配置内容,指定服务注册中心的Url

eureka.client.serviceUrl.defaultZone=

http://localhost:8000/eureka/

然后启动服务,刷新http://localhost:8000/就可以看见我们创建的服务已经被服务发现了。

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class HelloController {

//restful api方式

@GetMapping("/hello/{name}")

public String index(@PathVariable String name){

return "hello!" + name;

}

// 传统api方式

// @RequestMapping("/hello")

// public String index(@RequestParam String name) {

// return "hello "+name+",this is first messge";

// }

}

部署服务消费者

我们提供了服务当然是想要服务消费者去使用这些服务,接下来我们搭建服务消费者。

创建Maven项目,并在pom文件里配置所需的依赖。以下是我的服务消费者配置文件。

<?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.example</groupId>
 <artifactId>demo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>
 <name>spring-cloud-consumer</name>
 <description>Demo project for Spring Boot</description>
 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>1.5.3.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.7</java.version>
 <spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
 </properties>
 <dependencies>
 <dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-feign</artifactId>
 </dependency>
 <dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-eureka</artifactId>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 </dependency>
 </dependencies>
 <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>
 <build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
 </plugins>
 </build>
 </project>
 

然后更新Maven依赖,然后在入口文件添加@EnableDiscoveryClient注解和@EnableFeignClients注解,声明这个一个服务消费者。

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.

SpringBootApplication;

import org.springframework.cloud.client.discovery.

EnableDiscoveryClient;

import org.springframework.cloud.netflix.feign

.EnableFeignClients;

@SpringBootApplication

//启用服务注册与发现

@EnableDiscoveryClient

//启用feign进行远程调用

@EnableFeignClients

public class SpringCloudConsumerApplication {

public static void main(String[] args) {

SpringApplication.run(SpringCloudConsumerApplication.

class, args);

}

}

配置application.properties文件

#指定微服务的名称后续在调用的时候只需要使用

该名称就可以进行服务的访问

spring.application.name=spring-cloud-consumer

#配置端口号

server.port=9002

#服务注册中心的配置内容,指定服务注册中心的Url

eureka.client.serviceUrl.defaultZone=

http://localhost:8000/eureka/

编写feign调用实现接口

package com.example.consumer.remote;

import org.springframework.cloud.netflix.feign.FeignClient;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name= "spring-cloud-producer")

public interface HelloRemote {

//restful api 调用

@GetMapping("/hello/{name}")

public String hello(@PathVariable("name") String name);

//传统api调用

//@GetMapping(value = "/hello")

//public String hello(@RequestParam(value = "name") String name);

}

web层调用远程服务

package com.example.consumer.controller;

import com.example.consumer.remote.HelloRemote;

import com.example.consumer.remote.HiRemote;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class ConsumerController {

@Autowired

HelloRemote helloRemote;

@GetMapping("/hello/{name}")

public String index(@PathVariable("name") String name) {

return helloRemote.hello(name);;

}

}

然后启动服务,访问服务显示返回结果及表示成功!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

Letting Go of the Words

Letting Go of the Words

Janice (Ginny) Redish / Morgan Kaufmann / 2007-06-11 / USD 49.95

"Redish has done her homework and created a thorough overview of the issues in writing for the Web. Ironically, I must recommend that you read her every word so that you can find out why your customer......一起来看看 《Letting Go of the Words》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具