当前位置:   article > 正文

SpringBoot-eureka_springboot enruke

springboot enruke

Server

  • pom
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

spring-cloud-starter-netflix-eureka-server

依赖的是这个模块,十分注意,serverclient是严格区分的。

  • properties
server:
  port: 8761
eureka:
  instance:
    appname: eureka-server
  client:
    fetch-registry: false
    register-with-eureka: false
    service-url:
      defaultZone: http://localhost:8761/eureka/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

server.port:服务端口指定

eureka.instance.nameeureka实例名称的指定

client.fetch-registry:是否发现服务,默认为true,作为serverconsumer可以不用注册,不过想完全监控服务的话可以都进行注册

register-with-eureka:是否把server自身注册到服务中,默认true,不想浪费资源就false,想同一管理就true

service-url:指定服务的注册地址,访问页面就在8761,下面这个是注册地址而不是页面访问地址,注意区分

defaultZone:默认地址的默认key,注意区分大小写,或者进源码复制粘贴,千万注意啊

: http://localhost:8761/eureka/:指定的注册地址了,最后一个注意/,又是后匹配有问题

  • main
@EnableEurekaServer
@SpringBootApplication
public class ServerApplication {
	public static void main(String[] args) {
		SpringApplication.run(ServerApplication.class, args);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

@EnableEurekaServer:使能,都懂的

Provider

  • pom
<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-web</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

spring-cloud-starter-netflix-eureka-client:注意区分serverclient

注册中心采用server,服务注册或引用,导入的都是spring-cloud-starter-netflix-eureka-client

spring-boot-starter-webeureka采用的都是rest接口,服务提供的话都是用http进行通信。

所以服务对外一般都是controller的编写,TCP之类的不太清楚,不过zookeeper就是RPC

  • properties
server:
  port: 8801
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
    fetch-registry: false
spring:
  application:
    name: PROVIDER
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

fetch-registry:服务提供者嘛,我干脆就指定不进行服务发现了。

spring.application.name:这个名称要指定,在注册和发现的时候用的都是这个名称。

  • provider
@RestController
public class MyController {
    @GetMapping("/product")
    public String getProduct(){
        return "Product";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

提供的服务就是一般的http接口服务,没有什么特异之处,关键在于消费端的调用。

  • main
@EnableEurekaClient
@SpringBootApplication
public class ProviderApplication {
	public static void main(String[] args) {
		SpringApplication.run(ProviderApplication.class, args);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

@EnableEurekaClient:这个值得注意,通过入口函数的标记,完全就能够区分出serverproviderconsumer三种角色,而EnableEurekaClient表示的就是简单连接,客户端的简单连接就代表着注册服务,这个能够完全识别出就是provider

Consumer

  • pom
<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-web</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

provider,使用spring-cloud-starter-netflix-eureka-client连接server.

spring-boot-starter-web只是为了衔接rest表示连贯,消费模式不一定就需要http作为借口触发。

  • properties
server:
  port: 8802
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
    name: CONSUMER
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

spring.application.name:CONSUMER,服务注册名称

注意server.port的错位,不同服务器好说,单机的话注意端口不要冲突。

不论是server,provider,consumer或者是同一类型的多实例。

  • consumer
@RestController
public class MyController {
    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/consumer")
    public String consumerProduct(@RequestParam("name") String name){
        String product = restTemplate.getForObject("http://PROVIDER/product", String.class);
        return name + " consume the product [" + product + "]";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这里面值得注意的是RestTemplateSpring-Boot本身的尿性就是在借口调用的时候喜欢Template,

RedisTemplate,ElasticsearchTemplate…,这个就是RestTemplate,通过它我们就能够简单的发起请求,具体用法只能自己慢慢研究了。

http://PROVIDER/product:这就是它的接口调用的特异点,我们并不是直接进行服务访问,而是通过域名进行的访问,而这个域名,就是我们服务注册时候的spring.application.name

eureka的服务管理和维护,就是变成域名,自动的映射地址和端口。

我们的服务发现,其实就是在eureka维护的网站之中自动域名匹配,从而发起请求,调用服务。

  • main
@EnableDiscoveryClient
@SpringBootApplication
public class ConsumerApplication {
	public static void main(String[] args) {
		SpringApplication.run(ConsumerApplication.class, args);
	}
    @LoadBalanced
	@Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

@EnableDiscoveryClient:说了能辨识,这下明确了吧。

@EnableEurekaServer:开启服务

@EnableEurekaClient:开启客户端,注册服务

@EnableDiscoveryClient:开启客户端,发现服务

相当于一个是网站管理,一个是网站注册,一个是网站查询和访问

RestTemplate:这个东西后台并没有自动注入,只能手动进行注入了。

@LoadBalanced:负载均衡,或者叫做轮询访问?一个服务对应多个实例的时候,它会尝试把任务平均,减缓访问压力。

效果

  • server
    在这里插入图片描述

  • consumer
    在这里插入图片描述

警告

  • 包名

包名注意区分,不论是创建工程时还是手动maven引入,这种点容易被忽视。

  • 配置

如果不是专门研究的话,建议进行简单配置,过于负责的配置容易引起一些能力之外的问题。

  • 注解

三种注解区分角色,这样记忆不容易出错,只记忆注解,容易标记错误。

  • 地址

注意区分页面地址注册地址,这个并不是大问题,不过容易引起观念冲突。对于比较较劲的人,这种反而是天大的事,想要弄个明白,这点也不能马虎。

  • 其他

调试过程中,发现错误,修改以后还是不行的话,建议重启或者多尝试几遍。

我的也没错,但是后来自己好了。猜测两个原因

  1. 服务刷新

毕竟只会注册服务,不会注销服务,刷新机制也不够透彻,不能够完全避免自己的无知引起的问题,因此只能够笨办法----重启服务,这样全部刷新以后就是全新的。

  1. 机器原因

之前也是,rediselasticsearchzookeeper,其实服务没问题,但是我当时就是访问出错,但是过一会就好了,不敢保证是机器或者是服务的原因,不过如果有耐心一点,说不定能够获得收获。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/1000320
推荐阅读
相关标签
  

闽ICP备14008679号