此文章适合初学者简单搭建,更多的业务需求增加更多的配置和注解
搭建微服务项目以及pom文件就不说了,
参照 从零开始搭建微服务项目
第一步 新建Eureka Server项目
1、启动类
/**
* 注册中心
*/
@SpringBootApplication
@EnableEurekaServer
public class ServiceEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceEurekaApplication.class, args);
}
}
2、配置文件application-eureka.yml
spring:
application:
name: eureka
server:
port: 9000 (端口号自己设置,只要不冲突)
eureka:
instance:
hostname: eureka
client:
service-url:
defaultZone: http://eureka:9000/eureka/
注意: http://eureka:9000/eureka/这个地址第一个eureka要去本机C盘下的
C:\Windows\System32\drivers\etc下面的hosts文件添加
127.0.0.1 eureka
第二步 新建Eureka Client项目(案例是service-user)
1、启动类
@SpringBootApplication
@EnableDiscoveryClient
public class ServiceUserApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceUserApplication.class, args);
}
}
2、配置文件application.yml
配置多个方便测试负载均衡
application-user01.yml
spring:
application:
name: service-user(两个名字要一直)
server:
port: 9002
eureka:
client:
service-url:
defaultZone: http://eureka:9000/eureka/
application-user02.yml
spring:
application:
name: service-user(两个名字要一直)
server:
port: 9003
eureka:
client:
service-url:
defaultZone: http://eureka:9000/eureka/
3、新建个控制器controller
@RestController
public class UserController {
@Value("${server.port}")
private String port;
@RequestMapping("/hi")
public String hi(String name){
String str="hi "+name+" 端口号为:"+port;
return str;
}
}
第三步 新建Eureka Ribbon Client项目
1、重写RibbonConfig 中的RestTemplate加上注解@LoadBalanced
@SpringBootApplication
@EnableEurekaClient
public class EurekaRibbonClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaRibbonClientApplication.class, args);
}
}
2、重写RibbonConfig 中的RestTemplate加上注解@LoadBalanced
@Configuration
public class RibbonConfig {
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
}
3、新建个控制器controller
@RestController
public class RibbonController {
@Autowired
private UserService userService;
@RequestMapping("/hi")
public String hi(String name){
return userService.hi(name);
}
@Autowired
private LoadBalancerClient loadBalancerClient;
@RequestMapping("/testRibbon")
public String testRibbon(){
ServiceInstance instance = loadBalancerClient.choose("service-user");
return instance.getHost() + ":" + instance.getPort();
}
}
4、.新建个service
@Service
public class myService {
@Autowired
private RestTemplate restTemplate;
@RequestMapping
public String hi(String name){
return restTemplate.getForObject("http://service-user/hi?name=" + name, String.class);
}
}
第四步 测试
打开浏览器输入:http://eureka:9004/hi?name=xiaowang
结果:hi xiaowang 端口号为:9002
重新加载后观察端口变化:hi xiaowang 端口号为:9002
打开浏览器输入http://eureka:9004/testRibbon 测试一样
注意:调用远程服务应该在service层,例如上面
@Service
public class myService {
@Autowired
private RestTemplate restTemplate;
@RequestMapping
public String hi(String name){
return restTemplate.getForObject("http://service-user/hi?name=" + name, String.class);
}
}