赞
踩
pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
spring-cloud-starter-netflix-eureka-server
依赖的是这个模块,十分注意,
server
和client
是严格区分的。
properties
server:
port: 8761
eureka:
instance:
appname: eureka-server
client:
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://localhost:8761/eureka/
server.port
:服务端口指定
eureka.instance.name
:eureka
实例名称的指定
client.fetch-registry
:是否发现服务,默认为true
,作为server
和consumer
可以不用注册,不过想完全监控服务的话可以都进行注册
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);
}
}
@EnableEurekaServer
:使能,都懂的
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>
spring-cloud-starter-netflix-eureka-client
:注意区分server
和client
。注册中心采用
server
,服务注册或引用,导入的都是spring-cloud-starter-netflix-eureka-client
spring-boot-starter-web
:eureka
采用的都是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
fetch-registry
:服务提供者嘛,我干脆就指定不进行服务发现了。
spring.application.name
:这个名称要指定,在注册和发现的时候用的都是这个名称。
provider
@RestController
public class MyController {
@GetMapping("/product")
public String getProduct(){
return "Product";
}
}
提供的服务就是一般的
http
接口服务,没有什么特异之处,关键在于消费端的调用。
main
@EnableEurekaClient
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
@EnableEurekaClient
:这个值得注意,通过入口函数的标记,完全就能够区分出server
,provider
,consumer
三种角色,而EnableEurekaClient
表示的就是简单连接,客户端的简单连接就代表着注册服务
,这个能够完全识别出就是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>
同
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
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 + "]";
}
}
这里面值得注意的是
RestTemplate
,Spring-Boot
本身的尿性就是在借口调用的时候喜欢Template
,
RedisTemplate
,ElasticsearchTemplate
…,这个就是Rest
的Template
,通过它我们就能够简单的发起请求,具体用法只能自己慢慢研究了。
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();
}
}
@EnableDiscoveryClient
:说了能辨识,这下明确了吧。
@EnableEurekaServer
:开启服务
@EnableEurekaClient
:开启客户端,注册服务
@EnableDiscoveryClient
:开启客户端,发现服务相当于一个是
网站管理
,一个是网站注册
,一个是网站查询和访问
。
RestTemplate
:这个东西后台并没有自动注入,只能手动进行注入了。
@LoadBalanced
:负载均衡,或者叫做轮询访问
?一个服务对应多个实例的时候,它会尝试把任务平均,减缓访问压力。
server
consumer
包名注意区分,不论是创建工程时还是手动
maven
引入,这种点容易被忽视。
如果不是专门研究的话,建议进行简单配置,过于负责的配置容易引起一些能力之外的问题。
三种注解区分角色,这样记忆不容易出错,只记忆注解,容易标记错误。
注意区分
页面地址
和注册地址
,这个并不是大问题,不过容易引起观念
冲突。对于比较较劲的人,这种反而是天大的事,想要弄个明白,这点也不能马虎。
调试过程中,发现错误,修改以后还是不行的话,建议重启或者多尝试几遍。
我的也没错,但是后来自己好了。猜测两个原因
- 服务刷新
毕竟只会注册服务,不会注销服务,刷新机制也不够透彻,不能够完全避免自己的无知引起的问题,因此只能够笨办法----重启服务,这样全部刷新以后就是全新的。
- 机器原因
之前也是,
redis
,elasticsearch
,zookeeper
,其实服务没问题,但是我当时就是访问出错,但是过一会就好了,不敢保证是机器或者是服务的原因,不过如果有耐心一点,说不定能够获得收获。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。