SpringCloud Alibaba 微服务实战二 - 服务注册

本贴最后更新于 2014 天前,其中的信息可能已经时过境迁

导读:在之前一篇文章中我们准备好了基于 SpringCloud Alibaba 的基础组件,本期主要内容是将所有的服务注册进 Nacos,并让 account-serviceproduct-service 能对外提供基础的增删改查能力。

基础框架搭建

在你的 IDEA 中建立一个多模块的项目(过程略...),项目整体截图如下:
image.png

  • 在主 pom 中定义基础组件版本,使用 dependencyManagement 引入版本依赖。
<properties> <java.version>1.8</java.version> <spring-boot.version>2.1.9.RELEASE</spring-boot.version> <springcloud-alibaba.version>0.9.0.RELEASE</springcloud-alibaba.version> <mybatis-plus.version>3.1.1</mybatis-plus.version> <mysql.version>5.1.47</mysql.version> <encoding>UTF-8</encoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--database--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${springcloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
  • 在 Service 模块中引入具体依赖,个人习惯使用 log4j2 作为日志组件,根据你们习惯自行选择
<dependencies> <!--Spring Boot--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <!--Spring Cloud Alibaba--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--database--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies>

集成 Nacos 注册中心

  • 引入 spring-cloud-starter-alibaba-nacos-discovery,上一步骤已完成;
  • 修改配置文件 application.yml,配置 nacos 的服务地址(注意修改服务端口);
server: port: 8010 spring: application: name: account-service cloud: nacos: discovery: server-addr: 10.0.10.48:8848/
  • 在项目启动类上添加 @EnableDiscoveryClient 注解
@SpringBootApplication @RestController @EnableDiscoveryClient public class AccountServiceApplication { public static void main(String[] args) { SpringApplication.run(AccountServiceApplication.class, args); } }

简单三步就将服务注册进了 nacos,分别启动 account-serviceproduct-serviceorder-service,启动完成后访问 nacos 服务端地址 http://10.0.10.48:8848/nacos 可以发现服务正常注册。
image.png

提供基础增删改查能力

数据准备

本系列文章都是基于 account-serviceproduct-serviceorder-service,所以我们先准备好这三张基础表结构。

SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for t_order -- ---------------------------- DROP TABLE IF EXISTS `t_order`; CREATE TABLE `order` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `ORDER_NO` varchar(255) DEFAULT NULL, `ACCOUNT_CODE` varchar(255) DEFAULT NULL, `PRODUCT_CODE` varchar(255) DEFAULT NULL, `COUNT` int(11) DEFAULT '0', `AMOUNT` decimal(10,2) DEFAULT '0.00', PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; DROP TABLE IF EXISTS `product`; CREATE TABLE `product` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `PRODUCT_CODE` varchar(255) DEFAULT NULL COMMENT '编码', `PRODUCT_NAME` varchar(255) DEFAULT NULL COMMENT '名称', `COUNT` int(11) DEFAULT '0' COMMENT '库存数量', `PRICE` decimal(10,2) DEFAULT '0.00' COMMENT '单价', PRIMARY KEY (`ID`), UNIQUE KEY `UK_PRODUCT_CODE` (`PRODUCT_CODE`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4; -- ---------------------------- -- Records of product -- ---------------------------- INSERT INTO `product` VALUES ('1', 'P001', '笔记本', '10', '3000.00'); INSERT INTO `product` VALUES ('2', 'P002', '手表', '5', '250.00'); INSERT INTO `product` VALUES ('3', 'P003', '键盘', '50', '100.00'); INSERT INTO `product` VALUES ('4', 'P004', '辣条', '1000', '0.50'); DROP TABLE IF EXISTS `account`; CREATE TABLE `account` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `ACCOUNT_CODE` varchar(255) DEFAULT NULL, `ACCOUNT_NAME` varchar(255) DEFAULT NULL, `AMOUNT` decimal(10,2) DEFAULT '0.00', PRIMARY KEY (`ID`), UNIQUE KEY `UK_ACCOUNT_CODE` (`ACCOUNT_CODE`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; -- ---------------------------- -- Records of account -- ---------------------------- INSERT INTO `account` VALUES ('1', 'javadaily', 'JAVA日知录', '10000.00');

代码实现

由于目前只是对外提供简单 CRUD 的能力,所以这块代码我就不贴出来了,只提供一下我们对外的接口 Controller,Service 层和 Dao 层大家可以根据技术栈自行实现。这里向大家推荐下 mybatis-plus 插件,可以大大提高 CRUD 的实现效率,有兴趣的可以去官网查看文档。

  • 接口 Controller 层
@RestController @Log4j2 public class AccountController { @Autowired private AccountService accountService; @GetMapping("/account/{accountCode}") public AccountVO getByCode(@PathVariable String accountCode){ log.info("get account detail,accountCode is :{}",accountCode); return accountService.selectByCode(accountCode); } @PostMapping("/account/update") public AccountVO update(AccountVO accountVO){ log.info("update account:{}",accountVO); return accountService.updateAccount(accountVO); } @PostMapping("/account/insert") public AccountVO insert(AccountVO accountVO){ log.info("insert account:{}",accountVO); return accountService.insertAccount(accountVO); } @PostMapping("/account/delete") public int delete(@RequestParam String accountCode){ log.info("delete account,accountCode is {}",accountCode); return accountService.deleteAccount(accountCode); } }

controller 层的代码很丑陋有木有,不过没关系,我们后面会对其进行改造,毕竟写代码是个持续的过程,总之一句话,持续关注就对了。
image.png

  • 接口列表
    image.png
    这里是使用 Idea 的插件 RestfulToolkit 进行展示,而且还可以很方便的进行接口测试,也推荐给大家。

至此服务都注册进了注册中心 Nacos 并且都能对外提供基本的增删改查能力,那么本期的“SpringCloud Alibaba 微服务实战 - 服务注册”篇也就该结束啦,咱们下期有缘再见,期待你的关注!
image.png

  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    947 引用 • 1460 回帖 • 2 关注
  • 云计算
    79 引用 • 91 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • someone

    错觉?之前没 2 吗

  • someone
    作者

    Order 是关键词,所以把 SQL 改了下!

  • someone

    我是你粉丝啊

  • someone
    作者

    。。。。。你