文章目录
提供者与消费者
Eureka注册中心
搭建EurekaServer
- 引入依赖,除了主要的@EnableEurekaServer外,@SpringBootApplication等注解也存在这个依赖里。
<dependencies>
<!--Eureka服务端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
- 修改启动类,添加注解
package cn.itcast.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
- 修改配置文件,注册到Eureka;以及服务名称
server:
port: 10086
spring:
application:
name: eurekaserver # 服务名称
eureka:
client:
service-url: #将自己也注册到Eureka服务上,为了将来Eureka集群之间通信;例如有多个Eureka服务时,这些Eureka会互相做注册,为了数据交流,这里配的是Eureka集群的地址
defaultZone: http://127.0.0.1:10086/eureka/
- 启动,在浏览器中测试
服务注册
- 添加Eureka客户端依赖
<!--Eureka客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 修改application.yml
2.1 添加Eureka配置信息,将服务注册到Eureka
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/ # 新增注册到eureka
2.2 增加服务名
spring:
application:
name: userservice # 新增服务名
- 启动,可以看到服务都被注册上了
- 在idea如何启动多个,例如这里再启动一个userservice服务
修改Name,点击Modify options,选择add VM options
输入-Dserver.port=8082,该服务将会启动在8082端口
启动userservice2
可以看到userservice有2个服务被注册
服务发现
- 将“主机+端口”改为服务名,通过服务名可直接调用该服务,不再需要ip和端口
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// 2.定义url
// String url = "http://localhost:8081/user/"+order.getUserId();
String url = "http://userservice/user/"+order.getUserId(); //修改为服务名
// 3.发送http请求
User user = restTemplate.getForObject(url, User.class);
// 4.封装user
order.setUser(user);
// 5.返回
return order;
}
- 给RestTemplate添加@LoadBalanced注解,表示负载均衡
@SpringBootConfiguration
public class WebConfiguration {
@LoadBalanced //负载均衡
@Bean //相当于@Controller,@Service等
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
- 启动所有服务,在浏览器中输入4次http://localhost:8080/order/104,调用4次userservice服务时,发现UserApplication:8081和UserApplication2:8082分别被调用了2次,实现了负载均衡
项目结构