SpringCloud Alibaba微服務實戰二 - 服務註冊

導讀:在之前一篇文章中我們準備好了基於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 order
-- ----------------------------
DROP TABLE IF EXISTS `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 微服務實戰 - 服務註冊”篇也就該結束啦,咱們下期有緣再見!

系列文章

file

歡迎掃碼關注微信公衆號或 個人博客

發佈了51 篇原創文章 · 獲贊 620 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章