Nacos简介

什么是Nacos?

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。 服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:

Kubernetes ServicegRPC & Dubbo RPC ServiceSpring Cloud RESTful Service

Nacos的关键特性

服务发现和服务健康监测动态配置服务动态 DNS 服务服务及其元数据管理

说明:因为Dubbo和Nacos的应用场景一般都是在微服务项目中,所以接下来以SpringCloud项目为基础,展示Dubbo集成Nacos作为注册中心

Nacos 安装及入门

看我的另外一篇文章:https://blog.csdn.net/java_cpp_/article/details/128052696

项目目录总览 说明:文末可以获取项目全部代码

以上均是Maven项目

Step01-搭建SpringCloud父项目

使用IDEA创建一个普通的Maven项目,项目名自定义即可也可以跟我一样命名为SpringCloud-Dubbo-Nacos,删除src目录 重点是配置pom.xml 下面展示我的配置

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.mxf

SpringCloud-Dubbo-Nacos

pom

1.0-SNAPSHOT

ShopService

ShopService-Provider-8081

ShopService-Provider-8082

ShopService-Consumer-9091

8

8

UTF-8

2021.0.5

2.6.13

4.12

1.2.17

1.18.22

8.0.22

3.4.3.4

2021.0.4.0

3.1.2

2.1.1

org.springframework.cloud

spring-cloud-dependencies

${spring.cloud.version}

pom

import

org.springframework.boot

spring-boot-dependencies

${spring.boot.version}

pom

import

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-discovery

${spring.cloud.nacos.version}

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-config

${spring.cloud.nacos.version}

com.alibaba.nacos

nacos-client

${nacos.version}

com.alibaba.cloud

spring-cloud-starter-alibaba-sentinel

${spring.cloud.nacos.version}

org.apache.dubbo

dubbo-spring-boot-starter

${spring.cloud.dubbo.version}

mysql

mysql-connector-java

${mysql-connector-java.version}

org.projectlombok

lombok

${lombok.version}

com.baomidou

mybatis-plus-boot-starter

${mybatis.plus.version}

注意的是依赖版本尽量跟我一致,否则后续项目启动的时候会出现迷惑性bug(例如:启动时dubbo、nacos报出现循环依赖的问题),到此SpringCloud父项目就搭建完毕

Step02-服务接口模块

服务接口,我是一个购物服务为背景设计相关接口的,本模块可自定义,不一定要按照我的来 总览 重点是服务接口的定义

public interface ShopService {

// 查询所有商品

List queryAll();

// 根据名称模糊搜索

List queryByName(String name);

// 添加商品

int addGoods(Goods goods);

// 根据ID删除商品

int delGoods(int id);

// 购买商品

int shopping(int id);

// 测试使用

String hello(String name);

}

业务实体类(自由发挥):

@Data

@NoArgsConstructor

@AllArgsConstructor

@Accessors(chain = true)

public class Goods implements Serializable {

private Integer id;

private String name;

private Double price;

private Integer nums; // 库存

private String description;

}

服务接口主要是定义后续的服务功能,比较简单

Step03-服务提供者模块

该模块主要是去实现前面编写的服务接口,用来完成具体的业务逻辑 总览

首先在pom.xml中引入相关的依赖

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

SpringCloud-Dubbo-Nacos

com.mxf

1.0-SNAPSHOT

../pom.xml

4.0.0

ShopService-Provider-8081

8

8

UTF-8

com.mxf

ShopService

1.0-SNAPSHOT

org.springframework.boot

spring-boot-starter-web

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-discovery

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-config

com.alibaba.nacos

nacos-client

com.alibaba.cloud

spring-cloud-starter-alibaba-sentinel

org.springframework.cloud

spring-cloud-starter-bootstrap

org.apache.dubbo

dubbo-spring-boot-starter

mysql

mysql-connector-java

org.projectlombok

lombok

com.baomidou

mybatis-plus-boot-starter

依赖成功引入后,就先编写配置文件application.yaml,上面截图中有个bootstrap.yml,该文件是后续使用Nacos作为配置中心时才需要的,我会更新后续教程,暂时把所有配置配置到本地项目即可 application.yaml

server:

port: 8081

mybatis-plus:

mapper-locations: classpath:mapper/*.xml

spring:

application:

name: provider_application_8081

datasource:

driver-class-name: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://192.168.11.219:3306/test?useSSL=true&characterEncoding=utf-8&serverTimeZone=Asia/Shanghai&useUnicode=true

username: root

password: 123456

# dubbo的配置

dubbo:

application:

name: provider_application_8081 #配置应用名是为了加以区分不同的服务提供者

protocol:

name: dubbo

port: -1 # 端口设置为-1 是让dubbo自动在[20880, 65535]之间找一个可用的端口

registry:

id: nacos-registry

address: nacos://192.168.11.233:8848 # 在此配置nacos服务的IP地址及端口

config-center: # 可选

address: nacos://192.168.11.233:8848

metadata-report: # 可选

address: nacos://192.168.11.233:8848

下面重点介绍服务实现类ShopServiceImpl

/**

* 用 @DubboService 注解标记,就可以实现 Dubbo 的服务暴露

* 如果要设置服务参数,@DubboService 也提供了常用参数的设置方式。如果有更复杂的参数设置需求,则可以考虑使用其他设置方式

* @DubboService(version = "1.0.0", group = "dev", timeout = 5000)

*/

@DubboService

@Service

public class ShopServiceImpl implements ShopService { // 实现前面定义的服务接口

@Autowired

private GoodsService goodsService; // 使用MyBaits-Plus做业务层持久框架实现的DAO层服务类,该服务自行实现,就不展示

@Value("${spring.application.name}")

private String applicationName; // 把服务名注入进来主要是用来识别不同服务提供者

@Override

public List queryAll() {

return goodsService.list();

}

@Override

public List queryByName(String name) {

QueryWrapper wrapper = new QueryWrapper<>();

wrapper.like("name", name);

return goodsService.list(wrapper);

}

@Override

public int addGoods(Goods goods) {

return goodsService.save(goods) ? 1 : 0;

}

@Override

public int delGoods(int id) {

return goodsService.removeById(id) ? 1 : 0;

}

@Override

public int shopping(int id) {

return goodsService.shopping(id);

}

@Override

public String hello(String name) {

return "Hello: " + name + " From " + applicationName;

}

}

启动类的编写

@SpringBootApplication

@EnableDubbo // @EnableDubbo 注解必须配置,否则将无法加载 Dubbo 注解定义的服务,@EnableDubbo 可以定义在主类上

public class ProviderApplication_8081 {

public static void main(String[] args) {

SpringApplication.run(ProviderApplication_8081.class, args);

}

}

OK,持久层代码就不展示了较为容易实现都是固定写法,一个端口为8081的服务提供者模块编写成完成,接下来在编写运行在8082端口的服务。

Step04-8082端口上的服务提供者

该模块跟8081服务全部一样,直接复制上面那个项目进行部分修改即可 总览:

改下启动类的类名修改配置文件中的端口及应用名

server:

port: 8082

mybatis-plus:

mapper-locations: classpath:mapper/*.xml

spring:

application:

name: provider_application_8082

datasource:

driver-class-name: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://192.168.11.219:3306/test?useSSL=true&characterEncoding=utf-8&serverTimeZone=Asia/Shanghai&useUnicode=true

username: root

password: mxf520

# dubbo的配置

dubbo:

application:

name: provider_application_8082

protocol:

name: dubbo

port: -1

registry:

id: nacos-registry

address: nacos://192.168.11.233:8848

config-center:

address: nacos://192.168.11.233:8848

metadata-report:

address: nacos://192.168.11.233:8848

到此服务提供者模块全部实现

Step05-服务消费者模块

该模块主要是调用8081、8082端口的服务 总览: 导入依赖:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

SpringCloud-Dubbo-Nacos

com.mxf

1.0-SNAPSHOT

../pom.xml

4.0.0

ShopService-Consumer-9091

8

8

UTF-8

com.mxf

ShopService

1.0-SNAPSHOT

org.springframework.boot

spring-boot-starter-web

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-discovery

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-config

com.alibaba.nacos

nacos-client

org.springframework.cloud

spring-cloud-starter-bootstrap

org.apache.dubbo

dubbo-spring-boot-starter

com.alibaba.cloud

spring-cloud-starter-alibaba-sentinel

配置文件applicatin.yaml:

server:

port: 9091

spring:

application:

name: consumer_application_9091

# dubbo的配置

dubbo:

application:

name: consumer_application_9091

protocol:

name: dubbo

port: -1

registry:

id: nacos-registry

address: nacos://192.168.11.233:8848

config-center:

address: nacos://192.168.11.233:8848

metadata-report:

address: nacos://192.168.11.233:8848

实现远程服务调用

@RestController

public class ShopController {

/**

* @Reference 注解从 3.0 版本开始就已经废弃,改用 @DubboReference,以区别于 Spring 的 @Reference 注解

* @DubboReference 注解将自动注入为 Dubbo 服务代理实例,使用 shopService 即可发起远程服务调用

*/

@DubboReference

private ShopService shopService;

@GetMapping("/queryAll")

public List queryAllGoods() {

return shopService.queryAll();

}

@GetMapping("/queryByName")

public List queryByName(String name) {

return shopService.queryByName(name);

}

@GetMapping("/hi")

public String hello(String name) {

return shopService.hello(name);

}

}

启动类:

@SpringBootApplication

@EnableDubbo

public class ConsumerApplication_9091 {

public static void main(String[] args) {

SpringApplication.run(ConsumerApplication_9091.class, args);

}

}

OK,整个项目搭建到此已经完成,下面看项目运行展示

项目演示

首先启动Nacos(这里就以单机模式启动) 然后启动两个服务提供者: ProviderApplication_8081和ProviderApplication_8082 最后启动服务消费者: ConsumerApplication_9091 OK,现在服务全部启动完毕,下面看nacos中的注册信息 可以看到,两个服务提供者和一个服务消费者全部注册进来了,到此Nacos就作为一个注册中心实现了服务注册功能 下面进行消费者端的远程服务调用测试:

接口测试

先看下之前定义的服务接口:

public interface ShopService {

// 查询所有商品

List queryAll();

// 根据名称模糊搜索

List queryByName(String name);

// 添加商品

int addGoods(Goods goods);

// 根据ID删除商品

int delGoods(int id);

// 购买商品

int shopping(int id);

// 测试使用

String hello(String name);

}

首先测试hello()方法 在消费端9091调用: 可以看到是8081端口的提供者响应服务,多调用几次就能看到8082端口的提供者响应服务了: 该服务的实现是在8081、8082两个端口处实现的,消费端只是进行了一次RPC远程调用通过Dubbo实现的,同时也体现了Nacos注册中心的服务发现功能 测试查询所有商品的接口: 成功与后端数据库连通,就可以在此基础上进行更为复杂的业务开发了。

获取以上项目的源码 微信搜索公众号:JavaWizardM 回复:dubbo

Nacos作为配置中心

待更新…

转载请标明出处:https://blog.csdn.net/Java_cpp_/article/details/128051413

好文推荐

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: