服务的提供者和消费者 服务之间可以通过Spring提供的RestTemplate来进行http请求去请求另一个Springboot的项目,这就叫做服务间的远程调用。 当一个服务通过远程调用去调用另一个服务时,被调用的服务就叫做服务的提供者,调用服务的服务就叫做服务的消费者。 一个服务可以既是服务的提
服务之间可以通过Spring提供的RestTemplate来进行http请求去请求另一个Springboot的项目,这就叫做服务间的远程调用。当一个服务通过远程调用去调用另一个服务时,被调用的服务就叫做服务的提供者,调用服务的服务就叫做服务的消费者。一个服务可以既是服务的提供者也是服务的消费者。
服务调用关系:
远程调用的问题
eureka原理
搭建eurekaServer
服务注册
服务发现
eureka的作用:
在eureka架构中,微服务角色有两类:
EurekaServer服务注册
父工程引入对应版本的springcloud依赖
springboot 3.1.5对应
org.springframework.cloud
spring-cloud-dependencies
2022.0.4
pom
import
引入eureka服务端依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
启动eureka服务,在启动类上添加@EnableEurekaServer注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
配置文件中配置服务名称-地址-服务端口
spring:
application:
name: eureka-server #微服务名称
server:
port: 10086 #服务端口
eureka:
client:
service-url: #eureka地址信息 eureka自己也是一个微服务,也会被注册到eureka中 为了做eureka集群
defaultZone: http://127.0.0.1:10086/eureka
eureka服务端自己也会被注册到eureka服务中
然后就可以访问http://127.0.0.1:10086进入eureka注册中心了
确保父工程成功引入cloud依赖后引入eureka服务端依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
在配置文件中配置eureka服务名称和地址即可
server:
port: 8081
spring:
application:
name: cloud-user
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
引入依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
配置地址
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
给RestTemplate添加上@LoadBalanced注解,实现同一服务多个地址的负载均衡调用
//RestTemplate spring提供的远程调用模块 允许发送http请求
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
使用RestTemplate不通过具体的ip地址而是通过服务名称远程调用实现查询
@Autowired
RestTemplate restTemplate;
@GetMapping("/order/all/{id}")
public ordersUser getAllById(@PathVariable("id") Integer id){
String str1 = "http://cloud-order/order/"+id;
orders od = restTemplate.getForObject(str1, orders.class);
String str = "http://cloud-user/user/"+od.getOrderuserid();
user forObject = restTemplate.getForObject(str, user.class);
ordersUser ordersUser = new ordersUser();
ordersUser.setOrderid(od.getOrderid());
ordersUser.setUser(forObject);
ordersUser.setOrdername(od.getOrdername());
ordersUser.setOrderaddress(od.getOrderaddress());
ordersUser.setOrderprice(od.getOrderprice());
ordersUser.setOrdernumber(od.getOrdernumber());
return ordersUser;
}
小编推荐阅读