springcloud-erueka心得笔记

erueka分为2部分。1:服务注册中心 2:服务提供者。一个基于erueka的项目必须要有服务注册中心,服务注册中心实际就相当于zookper,用来管理服务。

本内容基于springboot2.0

内容为自己学习和项目实战中的理解和总结如有错误,或者补充。请下方留言

文章源码 https://download.csdn.net/download/hykwhjc/11432004

目录

一:笔记

1.服务注册中心:

1.1单点注册中心:

1.2高可用注册中心:

2:服务提供者

二:服务注册中心

2.1pom文件:

2.2启动类:

2.3配置文件:

三:服务提供者

3.1pom文件

3.1服务提供者

3.1.1启动类

3.2.1配置文件

3.2.3写一个controller

3.2服务消费者

3.2.1配置文件

3.2.2启动类

3.2.3写个controller,调用服务提供者


一:笔记

erueka是基于http的rest风格,都是通过controller层进行调用,区别就是erueka是通过服务名称进行调用,而不是具体的url地址。所以即使提供方改变了服务地址或者端口号,只要注册的服务中心没有变化,消费者不做任何更改仍可以调通。

1.服务注册中心:

重点步骤:

1.pom添加依赖
        <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>
2.启动类上添加@EnableEurekaServer


1.1单点注册中心:

在配置文件中加入以下配置:

#不向注册中心注册自己
eureka.client.register-with-eureka=false
#取消检索服务
eureka.client.fetch-registry=false

解释:表明自己是一个eureka server. 不将自己注册进去。

1.2高可用注册中心:

启动多个注册中心,在配置中使各个注册中心相互注册(代码一致,使用不同的配置文件即可):

eureka.client.serviceUrl.defaultZone配置填入集群中另外的server服务端的地址

例:

配置文件:

server.port=1111
spring.application.name=eureka-server #同一集群下注册中心必须使用同一服务名!!!!!

eureka.instance.hostname=localhost
eureka.client.serviceUrl.defaultZone=http://localhost2:1112/eureka/

 

server.port=1112
spring.application.name=eureka-server #同一集群下注册中心必须使用同一服务名!!!!!

eureka.instance.hostname=localhost2
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

 

 

解释:将自己作为服务向其他服务注册中心注册自己,形成一组互相注册的服务注册中心,以实现服务清单相互同步,达到高可用的效果。其中一个注册中心宕机后注册中心仍可用。

服务提供者配置文件也进行相应修改,eureka.client.serviceUrl.defaultZone属性将所有的注册中心地址以“,”分割(部分注册中心也可以)

例:

eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka,http://localhost2:1112/eureka

 

 

配置好后启动注册中心时会报错

 com.netflix.discovery.DiscoveryClient    : DiscoveryClient_EUREKA-SERVER/bogon:eureka-server:1112 - was unable to send heartbeat!

此错误可以忽略,意思是找不到注册地址,将注册的另一个注册中心启动后此错误就会消失。

 

2:服务提供者

eureka不区分服务消费者与提供者,统称为服务提供者。每一个服务都可以充当消费者或者提供者

重点步骤:

1.pom添加依赖

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

2.启动类上添加@EnableEurekaClient

配置文件

server.port=8090
spring.application.name=eureka-provide
#服务注册地址
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka,http://localhost2:1112/eureka

 在启动类中配置以下代码,使服务调用具有基于ribbon的负载均衡效果

  //使restTemplate具有负载均衡的效果
    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate ();
    }

二:服务注册中心

2.1pom文件:

<?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>
	<packaging>jar</packaging>
	<groupId>eureka.server</groupId>
	<artifactId>eureka-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>eureka-server</name>
	<description>Demo project for Spring Boot</description>

	<properties>

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

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<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>

</project>

2.2启动类:


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

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

}

2.3配置文件:

server.port=1111

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.instance.hostname=localhost
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

三:服务提供者

3.1pom文件

<?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>springcloud.eureka.provide</groupId>
	<artifactId>eureka-provide</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>eureka-provide</name>
	<description>Demo project for Spring Boot</description>

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

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</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>

为了演示eureka的服务调用,创建服务提供者(eureka-provide)和服务消费者(eureka-consumer)2个服务

3.1服务提供者

3.1.1启动类

@EnableEurekaClient
@SpringBootApplication
public class EurekaProvideApplication {

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

}

3.2.1配置文件

server.port=8090
spring.application.name=eureka-provide
#服务注册地址
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka,http://localhost2:1112/eureka

eureka.client.serviceUrl.defaultZone属性将所有的注册中心都写上

3.2.3写一个controller

@RestController
public class Hellcontroller {
    @Autowired
    private Registration getServiceId;// 服务注册
    @Autowired
    private DiscoveryClient client;

    @GetMapping(value = "/hello")
    public String index() {
        List <ServiceInstance> instances = client.getInstances (getServiceId.getServiceId ());
        if (instances != null && instances.size () > 0) {
            System.out.println ("/hello,host:" + instances.get (0).getHost () + ", service_id:" + instances.get (0).getServiceId ());
        }
        return "hello,provider";
    }

服务提供者可以用使用集群方式(用不同的端口号启动多个服务提供者即可),消费者在启动类中配置RestTemplate的属性就会采用ribbon的负载均衡策略进行调用,后面会介绍如何使用。

3.2服务消费者

3.2.1配置文件

server.port=8092
spring.application.name=eureka-consumer

eureka.client.serviceUrl.defaultZone=http://localhost:1112/eureka

eureka.client.serviceUrl.defaultZone属性只需要写其中一个注册中心即可,即使这个注册中心挂了仍然可以调通

3.2.2启动类


@EnableEurekaClient
@SpringBootApplication
public class EurekaConsumerApplication {
    //使restTemplate具有负载均衡的效果
    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate ();
    }

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

}

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

使RestTemplate具有负载均衡效果

3.2.3写个controller,调用服务提供者

重点:调用的url地址写的是提供者的服务名而不是url地址

@RestController
public class HelloController {

    @Resource
    RestTemplate restTemplate;
    @RequestMapping("/hello")
    public String hello(){
        return  restTemplate.getForEntity ("http://eureka-provide/hello",String.class).getBody ();
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值