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添加依赖
        
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-server
		
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添加依赖

        
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-client
		

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文件:



	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.6.RELEASE
		 
	
	jar
	eureka.server
	eureka-server
	0.0.1-SNAPSHOT
	eureka-server
	Demo project for Spring Boot

	

		1.8
		Greenwich.SR2
	

	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-server
		



		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	


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文件



	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.6.RELEASE
		 
	
	springcloud.eureka.provide
	eureka-provide
	0.0.1-SNAPSHOT
	eureka-provide
	Demo project for Spring Boot

	
		1.8
		Greenwich.SR2
	

	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-client
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	



	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	


为了演示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  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 ();
    }
}

你可能感兴趣的:(springboot专项学习)