Eureka的搭建测试以及和ZooKeeper的区别,简单配置

Eureka的搭建、测试,以及和Zookeeper的区别

主要功能

在微服务中作为一个注册中心使用,和ZooKeeper是类似的

搭建过程分为两个部分,一个是服务端,一个是客户端(主要是各种Provider)

单台服务端的配置

1.POM文件中需要加入eureka的jar包,项目上右键–Edit Starters–添加Eureka Server

2.yml配置文件中加入

eureka:
  server:
    enable-self-preservation: false
  instance:
    hostname: eureka1
    #如果只有一台eureka,就可以把自动拉取和注册关闭掉
  client:
    register-with-eureka: false
    fetch-registry: false

3.启动类中加入@EnableEurekaServer

@EnableEurekaServer
@SpringBootApplication
public class Sp05EurekaApplication {
	public static void main(String[] args) {
		SpringApplication.run(Sp05EurekaApplication.class, args);
	}
}

客户端的配置

1.POM文件中加入eureka的客户端jar包,可以用Spring Boot Starters,添加Eureka Discovery Client

2.yml配置文件中加入:

eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka

3.启动类加入注解:@EnableDiscoveryClient(可选,新版不用加这个注解)

@EnableDiscoveryClient
@SpringBootApplication
public class Sp03UserserviceApplication {
	public static void main(String[] args) {
		SpringApplication.run(Sp03UserserviceApplication.class, args);
	}
}

单台服务器调试

HOSTS文件中加入

127.0.0.1	eureka

然后访问eureka:2001即可访问可视化界面,查看所有已经注册在表中的Provider

集群配置

eureka服务端

yml配置文件

hostname需要不同,自动拉取和注册需要开启

需要创建一个profile配置文件:application-eureka1.yml 和 application-eureka2.yml

在每个配置文件中,只配置:hostname,register-with-eureka,fetch-registry

另外需要新加入 service-url

eureka:
  instance:
    hostname: eureka1
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka2:2002/eureka/
eureka:
  instance:
    hostname: eureka2
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka1:2001/eureka/

Profile配置项目会覆盖主配置文件(相同的会覆盖掉)

在启动参数中加入参数:

设置激活的配置文件

–spring.prifiles.active=eureka1

设置端口号

–server.port=2001

集群测试

打开eureka1:2001和eureka2:2002,在表格中有DS Replicas,显示的是集群中其他的服务器(副本服务器)

Demo

主要通过HttpClient方式测试跨域,由于比较繁琐,我这里用RestTemplate

由于是demo,就不写配置类了,直接放在启动类里面

@SpringBootApplication
public class Sp06RibbonApplication {

	public static void main(String[] args) {
		SpringApplication.run(Sp06RibbonApplication.class, args);
	}
	@Bean
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}
}

Controller:

@RestController
@Slf4j
public class RibbonController {
	@Autowired
	private RestTemplate rt;
	
	@GetMapping("/item-service/{orderId}")
	public JsonResult<List<Item>> getItems(@PathVariable String orderId) {
		//调用后台商品服务
		//url:http://localhost:8001/111222
		//{1}是占位符,用orderId填充
		JsonResult<List<Item>> r = rt.getForObject("http://localhost:8001/{1}", JsonResult.class, orderId);
		return r;
	}
	
	@PostMapping("/item-service/decreaseNumber")
	public JsonResult<?> decreaseNumber(@RequestBody List<Item> items){
		return rt.postForObject("http://localhost:8001/decreaseNumber", items, JsonResult.class);
	}
}

其他

Provider需要同时向所有服务器注册,以防某台突然宕机,服务器之间无法拉取到列表

Eureka注册名称的设置

注册时,有可能自动选择主机名进行注册,而不使用ip地址. 主机名在局域网内有可能不会被正确的解析,最好使用ip地址进行注册,而不注册主机名

选择正确的网卡:

修改bootstrap.yml

spring:
  cloud:
    inetutils:
      ignored-interfaces: # 忽略的网卡
        - VM.*
      preferred-networks: # 要是用的网卡的网段
        - 192.168.0

配置中心的配置文件:

eureka:
  instance:
    prefer-ip-address: true # 使用ip进行注册
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} # 界面列表中显示的格式也显示ip

Eureka和ZooKeeper的区别

Eureka强调可用性,集群是对等结构

可用性指的是15分钟内,超过85%的Provider心跳异常,Eureka会进入保护模式,网络稳定后,会自动退出保护模式

对等结构中,每一台服务器都是一个peer,某一台服务器宕机互不影响

但是没有Zookeeper的一致性,列表的更新可能会有不及时的情况(拉取列表有时间间隔)

Zookeeper强调一致性,集群是主从接口

没有可用性,主机宕机后,从服务器需要确认主服务器宕机后,再进行选举,这个过程大约是1分钟左右,在这段时间内,服务是中断不可访问的

如果有多台主服务器,这个过程也可以忽略,一台宕机后,另外的主服务器也会照常提供服务,等待宕机主服务器选举完成后,即可提供正常服务

但是这个搭建成本较高,需要服务器数量较多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值