个人名片:
博主:酒徒ᝰ.
个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志:三人行,必有我师焉。
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看
在服务拆分中发现了一个问题,那就是端口号。
当项目很大,拆分很多次时,一定会出现很多user-service,代表不同的服务。这时user就会出现多个端口号。
我们不肯能每一种端口号的写一次,这是就出现了Eureka。
在cloud-demo模块下新建一个eureka-service模块
eureka的客户端在其他模块里
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
dependencies>
注意添加@EnableEurekaService注解
package cn.itcast.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
需要添加端口号,名字,地址
server:
port: 10086 # 端口号
spring:
application:
name: eurekaserver # eureka服务名
eureka:
client:
service-url:
defaultZone: http://localhost:10086/eureka/ # eureka的地址信息
注册Eureka客户端,以user为例。
之前注册的是eureka-server,也就是服务端,那么,有服务端就需要客户端(eureka-client)去使用。
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
注意其中存在spring开头,在其后添加相应内容,并注意更改对应的name。
spring:
application:
name: userservice # eureka服务端
eureka:
client:
service-url:
defaultZone: http://localhost:10086/eureka/ # eureka的地址信息
按以下操作,将客户端进行复制。
注意添加端口号
此时,访问是无论8081还是8082都可以访问到user
eg:
http://localhost:8081/user/1
http://localhost:8082/user/1
将localhost:8081修改为userservice
这里的userservice来自
//修改后:
String url = "http://userservice/user/" + userId;
完整代码:
/**
* 查询user信息
* @param orderId
* @return
*/
@GetMapping("{orderId}")
public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
//1.根据id查询订单
Order order = orderService.queryOrderById(orderId);
//2.获取订单中的userid
Long userId = order.getUserId();
//3.设置查询user的地址
// String url = "http://localhost:8081/user/" + userId;
String url = "http://userservice/user/" + userId;
//3.1查询user
User user = restTemplate.getForObject(url, User.class);
//4.封装查询结果
order.setUser(user);
return order;
}
在启动类中天界@LoadBalance注解,
添加后代码:
/**
* 注册RestTemplate
* @return
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
开启负载均衡
注意:开启负载均衡,在RestTemplate中的Bean上加入一个@LoadBalance注解即可。
eureka启动类中添加,表示使用Eureka注册中心。
在eureka模块中天界了Eureka相应操作之后,记得在eureka的客户端的启动类中加入@EnableEurekaClient注解。