Eureka是SpringCloud框架提供的服务消费注册中心,将每一个springboot应用注册到注册中心,由注册中心担任消息中介。
Eureka注册中心基础配置:
#应用名
spring.application.name=eureka
#端口
server.port=1111
#是否将自己注册到注册中心
eureka.client.register-with-eureka=false
#false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
eureka.client.fetch-registry=false
消费提供者集群两个 ( :
基础配置:
#应用名字
spring.application.name=provider
#端口
server.port=1112
#注册中心地址
eureka.client.service-url.defaultZone=http://localhost:1111/eureka
创建一个小接口
@RestController
public class HelloController {
@Value("${server.port}")
Integer port; //注入启动接口
@GetMapping("/hello")
public String sayHello() {
return "hello!:"+port; //区别哪个服务提供者
}
}
打jar包 运行
provider1
java -jar provider-0.0.1-SNAPSHOT.jar --server.port=1188
provider2
java -jar provider-0.0.1-SNAPSHOT.jar --server.port=1169
接下来是消费端consumer
基础配置:
spring.application.name=consumer
server.port=1115
eureka.client.service-url.defaultZone=http://localhost:1111/eureka
小接口
@RestController
public class HelloController {
@Autowired
DiscoveryClient discoveryClient;
int count = 0;
@GetMapping("/hello2")
public String sayHello2() throws IOException {
List<ServiceInstance> instances = discoveryClient.getInstances("provider");
ServiceInstance serviceInstance = instances.get((count++)%2);
String host = serviceInstance.getHost();
int port = serviceInstance.getPort();
HttpURLConnection httpURLConnection = null;
String urlStr = "http://" + host + ":" + port + "/hello";
URL url = new URL(urlStr);
httpURLConnection= (HttpURLConnection) url.openConnection();
if (httpURLConnection.getResponseCode()==200){
//字符流接受
BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
String s = br.readLine();
br.close();
return s;
}
return "error";
}
}
打包测试(不打包直接idea运行也得)
java -jar consumer-0.0.1-SNAPSHOT.jar --server.port=1598
运行结果
Eureke中心(http://localhost:1111/)

访问消费端口:
http://localhost:1598/hello2
得到两种响应


说明简单的线性集群部署成功
改进
总不能每次消费服务都要一大堆代码吧
这我们就可以用到Spring 框架提供的 RestTemplate ,注入这个B(Bean)就可以使用
@Bean
RestTemplate restTemplate(){
return new RestTemplate();
}
这是没有负载均衡配置的RestTemplate ↑
这是有线性负载均衡配置的RestTemplate ↓ 也就多了 一个 LoadBalanced注解
@Bean
@LoadBalanced
RestTemplate restTemplateBalance(){
return new RestTemplate();
}
注入使用
@Autowired
@Qualifier("restTemplateBalance")
RestTemplate restTemplateBalance;
@GetMapping("/hello3")
public String sayHello3() throws IOException {
return restTemplateBalance.getForObject("http://provider/hello",String.class);
}
这里的url字符串中,具体的域名和端口被provider替换了,因为RestTemplate的负载均衡根据这个provider帮我们找到具体的写法,会自动解析,没有配置负载均衡的话不可以这样写;
341



被折叠的 条评论
为什么被折叠?



