4.启动服务这样就搭建好了
发布时间:2025-06-24 18:24:36 作者:北方职教升学中心 阅读量:559
1. 引入依赖
服务注册和服务发现都封装在eureka-client依赖中,所以服务发现时,也是引⼊eureka-client依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
2. 完善配置文件
服务发现也需要知道eureka地址,因此配置内容依然与服务注册⼀致,都是配置eureka信息
spring: application: name: order-serviceeureka: client: service-url: defaultZone: http://127.0.0.1:10010/eureka
3. 远程调用
@Slf4j@Servicepublic class OrderService { @Autowired private OrderMapper orderMapper; @Autowired RestTemplate restTemplate; @Autowired private DiscoveryClient discoveryClient; public OrderInfo selectOrderById(Integer orderId){ OrderInfo orderInfo = orderMapper.selectOrderById(orderId); //String url = "http://127.0.0.1:9090/product/"+orderInfo.getProductId(); //从Eureka中获取服务列表 List<ServiceInstance> instances = discoveryClient.getInstances("product-service"); String uri = instances.get(0).getUri().toString(); String url = uri+"/product/"+orderInfo.getProductId(); log.info("远程调用url:{}", url); ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class); orderInfo.setProductInfo(productInfo); return orderInfo;}}
如上图service层的代码。相关的注册信息直接配置在Nginx。这个就是注册中心。
为什么需要这个组件呢,解决什么问题呢?
当我们写微服务项目的时候,如果一个项目要去获得另一个项目中的对象,那么我们这里可以通过http请求的方式来获取,这里的url是写死的。
添加依赖:
<properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <java.version>17</java.version> <mybatis.version>3.0.3</mybatis.version> <mysql.version>8.0.33</mysql.version> <spring-cloud.version>2022.0.3</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>${mysql.version}</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter-test</artifactId> <version>${mybatis.version}</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement>
创建eureka-server 的子模块:
如图:
引入eureka-server依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
项目构建插件:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
完善启动类:
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer@SpringBootApplicationpublic class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); }}
编写配置文件:
server: port: 10010spring: application: name: eureka-servereureka: instance: hostname: localhost client: fetch-registry: false # 表⽰是否从Eureka Server获取注册信息,默认为true.因为这是⼀个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这⾥设置为false register-with-eureka: false # 表⽰是否将⾃⼰注册到Eureka Server,默认为true.由于当前应⽤就是Eureka Server,故⽽设置为false. service-url: # 设置与Eureka Server的地址,查询服务和注册服务都需要依赖这个地址. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
启动服务:
加载出这个页面就算,搭建成功了。这里主要还是pom.xml文件还有配置文件。
如图所示:
Eureka介绍
Eureka是Netflix OSS套件中关于服务注册和发现的解决方案。
这里我们直接从注册中心取到了,产品的信息。比较简单,这里就不展示了。这里的启动类还是需要自己手写。
这里的实体类,包含了产品。
Eureka主要分为两个部分:
• Eureka Server:作为注册中心Server端,向微服务应用程序提供服务注册,发现,健康检查等能力。这里我简单写了一个搜索商品的接口。但是随着微服务的流行与流量的激增,机器规模逐渐变大,并且机器会有频繁的上下线行为,这种时候需要运维手动地去维护这个配置信息是⼀个很麻烦的操作。
这里写了一个接口,是查询订单的信息,这里会列出service层的代码,会学习到新的东西。如果我们的机器变更,那么后续处理这些问题,将会非常的繁琐。也就是调⽤其它微服务提供的口。
1. 引入eureka-client依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
2. 完善配置文件
spring: application: name: product-serviceeureka: client: service-url: defaultZone: http://127.0.0.1:10010/eureka
3.启动服务
只要有这一行,就代表成功了。
Eureka的学习,主要包含以下三个部分:
1. 搭建Eureka Server。
2. 将order-service,product-service都注册到Eureka。
• 服务消费者(Client):⼀次业务中,调用其它微服务的服务。
4.启动服务
这样就搭建好了。
• 服务注册中⼼(Registry):用于保存Server的注册信息,当Server节点发生变更时,Registry会同步变更,服务与注册中心使用⼀定机制通信,如果注册中心与某服务长时间无法通信,就会注销该实例。
服务注册
这里我采用的案例是订单服务,有产品的服务(product-service),还有点单消费者(order-service)。
注册中心主要有三种角色:
• 服务提供者(Server):⼀次业务中,被其它微服务调用的服务。
服务发现
这里处理的是消费者的。
• Eureka Client:服务提供者,服务启动时,会向Eureka Server注册自己的信息(IP,端口,服务信息等),Eureka Server会存储这些信息。
如图:
这里我们还是,再创建一个子项目,和eureka-server一样的步骤,但这里是一个spring完整的项目。
什么是注册中心
在最初的架构体系中,集群的概念还不那么流行,且机器数量也比较少,此时直接用DNS+Nginx就可以满足几乎所有服务的发现。
5. 测试,调用order-service的接口
如图所示,已经展示出了product的信息,说明我们成功了.。
搭建项目
先创建好一个maven项目。
如上图。Spring Cloud对Eureka进行了集成,并作为优先推荐方案进行宣传,虽然目前Eureka 2.0已经停止维护,新的微服务架构设计中,也不再建议使用,但是目前依然有用量公司的微服务系统使用Eureka作为注册中心。
3. order-service远程调用时,从Eureka中获取product-service的服务列表,然后进行交互。这里我们就可以使用的Eureka(注册中心)来解决这个问题。也就是提供接口给其它微服务。