1.简介

springcloud简介

spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。

Feign简介

Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果

eureka简介

eureka是一个springcloud中的一个组件,属于服务注册和发现模块,类似的注册中心还有:zookeeper      consul

开发工具:idea

2.创建注册中心

使用idea创建springcloud项目

feignclient不走注册中心怎么配置_客户端

feignclient不走注册中心怎么配置_客户端_02

feignclient不走注册中心怎么配置_spring_03

创建项目后,pom.xml依赖如图

<?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>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.cloud</groupId>
	<artifactId>eurekaserver</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>eurekaserver</name>
	<description>springcloud eureka-server</description>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
	</properties>

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

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</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>

在配置文件中增加配置信息,这里我使用的是yml,如果有用properties的可以以.分隔

server:
  port: 8761
eureka:
  server:
    enableSelfPreservation: false
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

在启动类上加上注解@EnableEurekaServer

feignclient不走注册中心怎么配置_客户端_04

这时候,一个注册中心已经搭建好了.启动服务.访问localhost:8761

feignclient不走注册中心怎么配置_spring_05

 

3.创建客户端-服务提供者(eureka client)

创建过程和上面类似的.

创建成功后,在启动类上加上注解@EnableEurekaClient@EnableFeignClients,以使用fegin

feignclient不走注册中心怎么配置_客户端_06

配置文件:

#中心地址
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
#客户端端口
server:
  port: 8762
#客户端名称----在注册中心展示的名称
spring:
  application:
    name: service-client

 

重复上述操作.再创建一个项目!!!!

步骤完全一致.配置文件中port端口修改为8764,客户端名称修改一下,不能出现重名的

#中心地址
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
#客户端端口
server:
  port: 8764
#客户端名称----在注册中心展示的名称
spring:
  application:
    name: service-ribbon

目前我们已经创建了三个项目:1server端口8761   2.client端口8762   3.client端口8764

下一步在端口为8762的模块中创建一个接口

feignclient不走注册中心怎么配置_springcloud_07

写一个controller来调用接口

feignclient不走注册中心怎么配置_spring_08

下一步在端口为8764的模块中创建一个controller

截图中@RequestMapping("/hello"),要和8762中的接口上的@RequestMapping("/hello")地址一致

feignclient不走注册中心怎么配置_ci_09

 

完成搭建后,启动服务

此时注册中心application会出现刚才创建的两个服务,8762和8764

feignclient不走注册中心怎么配置_spring_10

下一步,访问8762地址的接口

feignclient不走注册中心怎么配置_ci_11

此时会看到调用8762中的接口,会通过fegin调用8764的内容

如果想达到负载均衡的效果,只需要在把8764的端口改为8765(注意,8764服务不要停掉,要在启动一个8765服务)

此时在访问localhost:8762/hello

会返回两种结果:

hello,zyy!8764

hello,zyy!8765

因为fegin默认集成了Ribbon,所以达到了负载均衡的效果.如果只使用Ribbon来调用服务,可以使用RestTemplate来调用

在启动类中加入

/**
	 *LoadBalanced注解用于开启负载均衡 
	 */
	@Bean
	@LoadBalanced
	RestTemplate restTemplate(){
		return new RestTemplate();
	}

即可达到负载均衡的效果