开发者学堂课程【Spring Cloud Alibaba Nacos 详解(下):实现 Service1】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/725/detail/12942
实现 Service1
内容介绍:
一、 定义 service-1-api
二、 实现 service-1-server
按照下图流程,Application-1做完之后要实现 Service-1,Service-1写完之后就可以实现 Application-1调用 Service-1。
实现 Service-1是基于 dobbo 协议。
一、定义 service-1-api
为了方便其它服务调用 dubbo 服务,专门定义 api 工程,此工程将作为 jar 被其它工程依赖。
定义 service-1-api 工程,pom.xml 如下:
<parent>
<artifactId>Service1</ artifactId>
<groupId>com.itheima.nacos</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0< / modelVersion>
<artifactId>service-1-api</ artifaId>
定义服务接口︰
package com.itheima.microservice.service1.api;
public interface ConsumerService {
public String service();
}
我们来创建 api,api 里面要有 interface,我们要让 interface 对外提供一个接口service,但它只是一个接口,它没有实现,如果要实现就需要我们在 service-1-server 里实现
二、 实现 service-1-server
1.初始化 service-1-server Maven 工程
实现 service-1-server 需要引入 service-1-api
<dependency>
</groupld>com.itheima.nacos</groupId>
<artifactId>service-1-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
还要引入 nacos-config 和 nacos-discovery 以及
Spring-cloud-starter-dubbo
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</art
ifactId>
</ dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacosdiscovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud< /groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
引入 Spring-cloud-starter-dubbo 是因为我们最终将 service1 实现暴露为 dubbo 服务结构
2.实现 Dubbo 服务
引入刷新之后,就可以在 java 里开发接口实现,开发接口实现需要先建一个包,建完之后要写实现类,叫 ConsumerServiceImpl
还要引入 @org.apache.dubbo.config.annotation.Service 标记 dubbo 服务
@org.apache.dubbo.config.annotation.Service //
注解标记此类的方法暴露为dubbo接口
Public class ConsumerServiceIapl implements ConsumerServic
e {
// dubbo
接口实现内容
public String service() {
return "Consumer invoke " ;
}
3.配置 Dubbo 服务
Service2 作为 Dubbo 服务消费方配置与服务提供方类似,注意,service1 不仅使消费方,同时还是服务提供方。
server:
port: ${port : 56030} #
启动端口 命令行注入
spring:
application:
name: service1
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
namespace
:c67e497-a698-4d6d-9bb1-cfac5f5b51c4 #开发环境
group
:NACOS_MICROSERVICE_GROUP # xx业务组
dubbo:
scan :
# dubbo
服务扫描基准包
base-packages : com.itheima.microservice
protocol:
# dubbo
协议
name: dubbo
# dubbo
协议端口
port: ${dubbo_port : 20881}
registry:
address: nacos
://127.0.0.1:8848
application:
qos-enable: false #dubbo
运维服多是否开启
consumer:
check:false #启动时就否检查依赖的服务
这个服务对外暴露的服务端口有两个,一个是 dubbo 端口,一个是 http 的端口。
以上 YAML 内容,dubbo 开头的为 dubbo 服务的配置:
•dubbo.scan.base-packages:指定 Dubbo 服务实现类的扫描基准包,将
@org.apache.dubbo.config.annotation.Service 注解标注的 service 暴露为 dubbo服务。
•dubbo. protocol : Dubbo 服务暴露的协议配置,其中子属性 [name 为协议名称,por t为 dubbo 协议端口可以指定多协议,如:dubbo.protocol.rmi.port=1099
•dubbo.registry : Dubbo 服务注册中心配置,其中子属性 [address 的值"nacos://127.0.0.1:8848",说明dubbo服务注册到nacos
相当于原生 dubbo 的 xm l配置中的 <dabbo:registry address="10.20.153.10:9090”/>
上半部分为 SpringCloud 的相关配置︰
•spring.application.name : Spring 应用名称,用于 Spring Cloud 服务注册和发现。
该值在 Dubbo Spring Cloud 加持下被视作 dubbo.application
.name,因此,无需再显示地配置 dubbo. application.name
•spring.cloud.nacos.discovery : Naco s服务发现与注册配置,其中子属性 server-addr指定 Nacos 服务器主机和端口
•••spring .cloud.nacos.config : Nacos 配置中心配置,其中子属性 server-addr指定Nacos服务器主机和端口
4.启动服务消费方应用
启动 service1 需要建启动类
@SpringBootApplication@EnableDiscoveryClient
public class service1Bootstrap{
public static void main( String[] args) {
SpringApplication.run(Service1Bootstrap.class,args);
}
}
Service1Bootstrap 启动后,应用 service1 将出现在 Nacos 控制台界面。
Service1 的流程是:首先是将接口统一写在api工程,其次 api 的实现类是统一写在service-1-server 工程里,最终要暴露为dubbo需要一个 service 注解,配置文件包括cloud配置和 dubbo 配置
启动成功与否除了看控制台报不报错还要看 nacos