实现 Service2 | 学习笔记

简介: 快速学习实现 Service2。

开发者学堂课程【Spring Cloud Alibaba Nacos 详解(下)实现 Service2】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/725/detail/12944


实现 service2

 

内容介绍:

一、 定义 service-2-api

二、 实现 service-2-server

三、 实现 service1 调用 service2

 

在整个系统架构中,除了 application 调用 service 之外,service service 之间也是要进行远程调用

 

图片.png

 

 

一、定义 service-2-api

定义service-2-api工程,pom.xml如下:

<parent>

<artifactId>Service2</artifactId>

<groupId>com.itheima.nacos</groupId>

<version>1.0-SNAPSHOT</version>

</parent>

<modelVersion>4.o.o</ modelVersion>

<artifactId>service-2-api</ artifactId>I 

并定义服务接口,Dubbo 服务接口是服务提供方与消费方的远程通讯契约,通常由普通的 Java 接口( interface )来声明,

P roviderService 接口:

package com.itheima.microservice.service2.api;

public interface ProviderService {

String service();

}

 

二、实现 service-2-server

1.初始化 service-2-server Maven 工程

首先,创建 artfactId 名为 service-2-server Maven 工程,并在其 pom.xml 文件中增添 Dubbo Spring Cloud 必要的依赖:

dependencies>

<dependency>

<groupId>com. ithe ima . nacos</ groupId>

<artifactId>service- 2- api</artifactId>

<vers ion>1.0- SNAPSHOT</version>

</dependency>

<dependency>

<groupId>com. alibaba . cloud</groupId>

<artifactId>spring- cloud- starter alibaba- nacos config</

artifactId>

</dependency>

<dependency >

<groupId>com . alibaba . clouds/groupId>

<artifactId>spring-cloud-starter-alibaba-nacos-discovery</ artifactId>

</dependency>

<dependency>

在引入 nacos confignacos discovery 之后,我们就可以写实现的接口。

2.实现 Dubbo 服务

ProviderService 作为暴露的 Dubbo 服务接口,服务提供方 service-2-server 需要将其实现:

package com.Itheima.microservice.service2.servic;

@org.apache.ubbo.config.annotation.Service

public class ProviderServiceImpl implements ProviderService {

@Override

public String service( ) {

return "Provider invoke";

}

}

其中,@org.apache.dubbo.config.annotation.Service Dubbo 服务注解,仅声明该 java 服务(本地)实现为 Dubbo 服务。因此, 下一步需要将其配置 Dubbo 服务(远程)

3.配置 Dubbo 服务

在暴露 Dubbo 服务方面,推荐开发人员外部化配置的方式,即指定 Java 服务实现类的扫描基准包。

Dubbo Spring Cloud 继承了 Dubbo Spring Boot 的外部化配置特性,也可以通过标注

@DubboComponentScan 来实现基准包扫描。

同时, Dubbo 远程服务需要暴露网络端口, 并设定通讯协议,完整的 YAML 配置如下所示:

server:

port: ${port : 56040} #启动端口 命令行注入

spring:

application:

name: service2

main:

allow-bean-definition-overriding: true # Spring Boot 2.1 需要设定

cloud:

nacos:

discovery:

server-addr: 127.0.0.1:8848

namespace: c67e4a97-a698-4d6d-9bb1-cfac5f5b51c4

cluster-name: DEFAULT

config:

server-addr: 127.0.0.1:8848 #配置中心地址

file-extension: yaml

namespacec67e497-a698-4d6d-9bb1-cfac5f5b51c4 #开发环境

groupNACOS_MICROSERVICE_GROUP # xx业务组

dubbo:

scan :

# dubbo 服务扫描基准包

base-packages : com.itheima.microservice

protocol:

# dubbo协议

name: dubbo

# dubbo协议端口(-1表示自增端口,从20880开始)

port: ${dubbo_port : 20891}

registry:

address: nacos//127.0.0.1:8848

application:

qos-enable: false

consumer:

checkfalse  

4.启动服务提供方应用

Dubbo Spring Cloud 引导类与普通 Spring Cloud 应用并无差别,如下所示:

@SpringBootApplication

@EnableDiscoveryClient

public class Service2Bootstrap {

public static void main(String[ ] args) {

SpringApplication.run(Service2Bootstrap. class, args);

}

}

在引导 Service2Bootstrap 之前,请提前启动 Nacos 服务器。当 Service2Bootstrap 启动后,应用 service将出现在 Nacos 控制台界面。

启动之后,可以观察 nacos 服务列表 Dev,点 service2 后的详情,端口为20891。至此,service2 实现完成

 

三、实现 service1调用 service2

1.引用 service2

service2 中添加 service1 的依赖:

<dependency>

<groupId>com.itheima.nacos</groupId>

<artifactId>service-2-api</artifactId>

<version>1.0- SNAPSHOT</version>

</dependency>

2.实现远程调用

@org.apache.dubbo.config.annotation.Service

public class ConsumerServiceImpl implements Consumer

Service {

@Reference

ProviderService providerService;

public String service() {

return "Consumer invoke |” +providerService.service();

service1重启,service1 重启刷新之后,最终返回的内容应该包括 service2里的字符串。

图片.png

相关文章
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现深度学习模型:智能心理健康评估
使用Python实现深度学习模型:智能心理健康评估
551 3
使用Python实现深度学习模型:智能心理健康评估
|
存储 关系型数据库 分布式数据库
PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称
PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称。本文深入解析PolarStore的内部机制及优化策略,包括合理调整索引、优化数据分布、控制事务规模等,旨在最大化其性能优势,提升数据存储与访问效率。
249 5
|
数据库
解决numpy.core._exceptions.UFuncTypeError: ufunc ‘add‘ did not contain a loop with signature matching
解决numpy.core._exceptions.UFuncTypeError: ufunc ‘add‘ did not contain a loop with signature matching
1609 0
解决numpy.core._exceptions.UFuncTypeError: ufunc ‘add‘ did not contain a loop with signature matching
|
Kubernetes 监控 Docker
微服务与容器化:Kubernetes 实践
【8月更文第29天】随着云计算的发展,越来越多的企业选择采用微服务架构来构建他们的应用程序。微服务架构允许将复杂的大型应用程序拆分成一系列小型、独立的服务,这些服务可以独立部署、扩展和维护。然而,这种架构也带来了新的挑战,特别是在服务的部署、监控和扩展方面。容器化技术,尤其是 Kubernetes,已经成为解决这些挑战的关键工具。
272 0
|
Java 编译器 数据安全/隐私保护
Java 重写(Override)与重载(Overload)详解
在 Java 中,重写(Override)和重载(Overload)是两个容易混淆但功能和实现方式明显不同的重要概念。重写是在子类中重新定义父类已有的方法,实现多态;重载是在同一类中定义多个同名但参数不同的方法,提供多种调用方式。重写要求方法签名相同且返回类型一致或为父类子类关系,而重载则关注方法参数的差异。理解两者的区别有助于更好地设计类和方法。
1063 3
|
NoSQL Java Redis
京东双十一高并发场景下的分布式锁性能优化
【10月更文挑战第20天】在电商领域,尤其是像京东双十一这样的大促活动,系统需要处理极高的并发请求。这些请求往往涉及库存的查询和更新,如果处理不当,很容易出现库存超卖、数据不一致等问题。
366 1
|
人工智能 分布式计算 数据挖掘
阿里云 MaxCompute MaxFrame 开启免费公测,统一 Python 开发生态
阿里云 MaxCompute MaxFrame 开启免费公测,统一 Python 开发生态。分布式计算框架 MaxFrame 支持 Python 编程接口并可直接复用 MaxCompute 弹性计算资源及海量数据,100%兼容 Pandas 且自动分布式,与 MaxCompute Notebook、镜像管理等功能共同构成了 MaxCompute 的 Python 开发生态。用户可以以更熟悉、高效、灵活的方式在 MaxCompute 上进行大规模数据分析处理、可视化数据探索分析以及科学计算、ML/AI 开发等工作。
460 7
|
存储 Linux 开发工具
深入了解Git LFS:高效管理大型文件的利器
Git LFS是Git的一个扩展,旨在更有效地处理大型文件。它通过将大文件存储在单独的位置,而在Git仓库中只保留引用和元数据,来减小仓库的体积。这使得Git仓库能够更快速地克隆、推送和拉取,同时有效地处理大型媒体文件、二进制文件等。
735 1
深入了解Git LFS:高效管理大型文件的利器
|
Ubuntu 关系型数据库 MySQL
expect自动交互脚本:简化你的自动化任务
`expect` 是Linux自动化神器,用于模拟键盘输入与交互式应用自动交互,常用于自动登录服务器、执行命令。安装 `expect`(CentOS: `yum -y install tcl expect`, Ubuntu: `apt-get -y install expect`) 后,编写脚本如SSH登录示例,自动发送密码和命令。通过结合shell命令,`expect` 可实现复杂任务,如获取IP、登录MySQL。支持多服务器管理,根据用户输入选择登录。学习 `expect` 提升自动化效率!
981 0
|
存储 Kubernetes 安全
kubernetes集群备份与恢复
k8s集群服务所有组件都是无状态服务,所有数据都存储在etcd集群当中,所以为保证k8s集群的安全可以直接备份etcd集群数据,备份etcd的数据相当于直接备份k8s整个集群。
2548 1