注册中心呢就像是古代府里的大管家,spring boot项目呢就是下人们,他们需要告诉管家,自己能做什么,比如:我叫王五,我会扫地,我是李四,我会做饭。这个过程就叫做服务注册,然后老爷饿了,怎么办总不能看到一个人就问“你会不会做饭啊?” 所以最简单的就是直接找管家说“我饿了” ,然后管家就会找到对应的 李四。
首先创建一个spring boot 项目
1,引入依赖
< dependency>
< groupId> org.springframework.cloud</ groupId>
< artifactId> spring-cloud-starter-netflix-eureka-server</ artifactId>
</ dependency>
2,在启动类里加上注解
import org. springframework. boot. SpringApplication;
import org. springframework. boot. autoconfigure. SpringBootApplication;
import org. springframework. cloud. netflix. eureka. server. EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class SpringcloudApplication {
public static void main ( String[ ] args) {
SpringApplication. run ( SpringcloudApplication. class , args) ;
}
}
3,yml配置文件
server :
port : 8761
spring :
application :
name : eureka- serve
eureka :
server :
enable-self-preservation : false
client :
register-with-eureka : false
service-url :
defaultZone : http: //localhost: 8761/eureka/
fetch-registry : false
大功告成,启动服务 打开http://127.0.0.1:8761/
应该是这个样子的,红色框内是注册的服务,应该是空的,因为我这里注册过了。
创建一个服务端
同样是创建一个spring boot,依赖和上面的一样
yml配置文件
eureka :
client :
serviceUrl :
defaultZone : http: //localhost: 8761/eureka/
server :
port : 8763
spring :
application :
name : service
我们创建一个hello() 方法提供服务 建一个controller
@Controller
public class ClientController {
@Value ( "${server.port}" )
String port;
@RequestMapping ( "/hello" )
@ResponseBody
public String home ( ) {
return "hi 我是服务端,i am from port:" + port;
}
}
启动服务就可以看到已经注册的里面有 service了
然后创建一个消费端(用来调用服务的)
创建一个spring boot,yml配置文件只需要改一下端口,,依赖和上面的一样
eureka :
client :
serviceUrl :
defaultZone : http: //localhost: 8761/eureka/
server :
port : 8764
spring :
application :
name : service- ribbon
在启动类里加上 RestTemplate (提供了多种便捷访问远程Http服务的方法)
public class ConsumerApplication {
public static void main ( String[ ] args) {
SpringApplication. run ( ConsumerApplication. class , args) ;
}
@Bean
@LoadBalanced
RestTemplate restTemplate ( ) {
return new RestTemplate ( ) ;
}
}
在controller写调用服务端的方法
@Controller
public class HelloController {
@Autowired
RestTemplate restTemplate;
@RequestMapping ( "/hello" )
@ResponseBody
public String hello ( ) {
return restTemplate. getForObject ( "http://SERVICE/hello" , String. class ) ;
}
}
查看服务端和消费端是否已经注册完成,然后 测试8764端口
另外还有负载均衡,只要你再创建一个 服务端,然后配置文件里name名字和之前那个一样,而且有一个同样的 hello 映射方法,他就会自动的两个依次切换调用,多个也是同理。