1.使用Idea启动Nacos

之前我们启动Nacos都是使用dos命令行

启动过程比较复杂,命令比较长

Idea实际上支持我们更加方便的启动Nacos

步骤1:

步骤2:

步骤3:

配置成功之后

Nacos就会出现在idea的启动选项中了

这种方法实际上只是为了简便大家启动nacos的操作,还是需要掌握命令行的启动方式的!

2.创建csmall-cart子项目

2.1创建项目

创建csmall-cart子项目

父子相认

子项目pom文件为:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>cn.tedu</groupId><artifactId>csmall</artifactId><version>0.0.1-SNAPSHOT</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>cn.tedu</groupId><artifactId>csmall-cart</artifactId><version>0.0.1-SNAPSHOT</version><name>csmall-cart</name><description>Demo project for Spring Boot</description><dependencies><!--web实例--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--mybatis整合springboot--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><!--alibaba 数据源德鲁伊--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--all-common依赖--><dependency><groupId>cn.tedu</groupId><artifactId>csmall-commons</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!--在线api文档--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId></dependency><!--  Nacos注册依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies></project>

删除test文件夹

删除application.properties配置文件

创建application.yml文件,内容如下

server:port: 20001
#公共配置
mybatis:configuration:# 禁用缓存cache-enabled: false# 配置映射驼峰命名法,数据库中user_name的字段,会映射在java的userName属性上map-underscore-to-camel-case: true# 将运行的sql语句输出到控制台log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
knife4j:# 开启增强配置enable: true# 生产环境屏蔽,开启将禁止访问在线API文档production: false# Basic认证功能,即是否需要通过用户名、密码验证后才可以访问在线API文档basic:# 是否开启Basic认证enable: false# 用户名,如果开启Basic认证却未配置用户名与密码,默认是:admin/123321username: root# 密码password: root
spring:profiles:active: dev

2.2准备数据

推荐大家学习使用数据库的专用可视化工具来操作数据库

heidiSQL(安装MariaDB自带的)免费的

SqlYog Navicat是收费的

我们cart模块要操作数据库,首先保证要有数据

所以我们要创建需要的表和添加表中的数据

sql代码已经发送在csmall-finish项目的node文件夹中:csmall_db.sql

运行其中的sql代码即可

CREATE DATABASE  IF NOT EXISTS `csmall_db` DEFAULT CHARACTER SET utf8mb4;
USE `csmall_db`;DROP TABLE IF EXISTS `cart_tbl`;CREATE TABLE `cart_tbl` (`id` int NOT NULL AUTO_INCREMENT COMMENT '购物车id',`commodity_code` varchar(255) DEFAULT NULL COMMENT '商品编码',`price` int DEFAULT '0' COMMENT '商品单价',`count` int DEFAULT '0' COMMENT '购买数量',`user_id` varchar(255) DEFAULT NULL COMMENT '用户id',PRIMARY KEY (`id`),UNIQUE KEY `commodity_code` (`commodity_code`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3;insert  into `cart_tbl`(`id`,`commodity_code`,`price`,`count`,`user_id`) values
(1,'PU201',500,10,'UU100');DROP TABLE IF EXISTS `order_tbl`;CREATE TABLE `order_tbl` (`id` int NOT NULL AUTO_INCREMENT COMMENT '订单id',`user_id` varchar(255) DEFAULT NULL COMMENT '用户id',`commodity_code` varchar(255) DEFAULT NULL COMMENT '商品编码,也可以是商品id',`count` int DEFAULT '0' COMMENT '购买这个商品的数量',`money` int DEFAULT '0' COMMENT '订单金额',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8mb3;insert  into `order_tbl`(`id`,`user_id`,`commodity_code`,`count`,`money`) values
(22,'UU100','PU201',10,200),
(23,'UU100','PU201',10,200),
(24,'UU100','PU201',10,200),
(25,'UU100','PU201',10,200);DROP TABLE IF EXISTS `stock_tbl`;CREATE TABLE `stock_tbl` (`id` int NOT NULL AUTO_INCREMENT COMMENT '商品id',`commodity_code` varchar(255) DEFAULT NULL COMMENT '商品编码',`count` int DEFAULT '0' COMMENT '商品库存',PRIMARY KEY (`id`),UNIQUE KEY `commodity_code` (`commodity_code`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3;insert  into `stock_tbl`(`id`,`commodity_code`,`count`) values
(1,'PU201',990);DROP TABLE IF EXISTS `undo_log`;CREATE TABLE `undo_log` (`id` bigint NOT NULL AUTO_INCREMENT,`branch_id` bigint NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=68 DEFAULT CHARSET=utf8mb3;

2.3配置yml文件

application-dev.yml

spring:datasource:url: jdbc:mysql://localhost:3306/csmall_db?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=trueusername: rootpassword: rootapplication:#  为当前项目起名,这个名字会被Nacos记录并使用name: nacos-cartcloud:nacos:discovery:# 配置Nacos所在的位置,用于注册时提交信息server-addr: localhost:8848ephemeral: false

2.4Spring相关配置类

和business项目一样

我们需要创建config包,包中创建相关配置类

@Configuration // 所有配置Spring的配置类必须添加这个注解
@ComponentScan(basePackages = "cn.tedu.csmall.commons.exception")
public class CommonsConfiguration {
}

knife4j配置

@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfiguration {/*** 【重要】指定Controller包路径*/private String basePackage = "cn.tedu.csmall.cart.controller";/*** 分组名称*/private String groupName = "base-cart";/*** 主机名*/private String host = "http://java.tedu.cn";/*** 标题*/private String title = "酷鲨商城项目案例在线API文档--基础cart-web实例";/*** 简介*/private String description = "构建基础cart-web项目,实现购物车管理";//  略....
}

当前cart模块除了上述配置之外,还需要添加Mybatis扫描mapper包的配置

config包中再创建一个MyBatisConfiguration类,代码如下

@Configuration
// Mybatis框架扫描mapper包接口的注解
@MapperScan("cn.tedu.csmall.cart.mapper")
public class MybatisConfiguration {
}

我们尝试启动Nacos后

启动cart模块

观察nacos服务列表中是否包含当前服务名称

2.5编写cart项目业务

cart模块能够正常启动,但是还没有任何业务

结合我们最终生成订单的业务

当前cart模块需要开发如下两个功能

1.新增购物车中商品

2.删除购物车中商品

2.6开发持久层

创建mapper包

创建CartMapper接口,中编写两个方法

一个新增购物车,一个删除购物车

@Repository
public interface CartMapper {// 新增购物车中商品的方法@Insert("insert into cart_tbl(commodity_code,price,count,user_id) " +"values(#{commodityCode},#{price},#{count},#{userId})")void insertCart(Cart cart);// 删除购物车@Delete("delete from cart_tbl where user_id=#{userId} and " +" commodity_code=#{commodityCode}")void deleteCartByUserIdAndCommodityCode(@Param("userId") String userId,@Param("commodityCode") String commodityCode);}

2.7开发业务逻辑层

创建service包

包中创建ICartService

接口中编写新增和删除购物车的两个业务逻辑层方法声明

public interface ICartService {// 新增购物车商品的业务逻辑层方法void cartAdd(CartAddDTO cartAddDTO);// 删除购物车商品的业务逻辑层方法void deleteUserCart(String userId,String commodityCode);}

创建impl包

编写业务实现类

@Service
@Slf4j
public class CartServiceImpl implements ICartService {@Autowiredprivate CartMapper cartMapper;@Overridepublic void cartAdd(CartAddDTO cartAddDTO) {// 当前方法参数是CartAddDTO类型,而mapper执行新增需要的类型是Cart// 所以需要将现在cartAddDTO中,所有同名属性赋值给Cart类型对象才能实现mapper调用// 先实例化一个Cart对象Cart cart=new Cart();// 利用BeanUtils工具类,将cartAddDTO同名属性赋值到cartBeanUtils.copyProperties(cartAddDTO,cart);// 调用mapper新增购物车商品的方法cartMapper.insertCart(cart);// 如果新增顺利,将新增的对象输出到日志log.info("新增购物车商品成功:{}",cart);}@Overridepublic void deleteUserCart(String userId, String commodityCode) {// 删除功能需要userId和commodityCode,直接使用参数调用即可cartMapper.deleteCartByUserIdAndCommodityCode(userId,commodityCode);// 一切正常,日志提示log.info("购物车删除完成");}
}

如果需要设置日志输出级别

dev的yml文件中添加

logging:level:cn.tedu.csmall.cart: debug

2.8开发控制层

创建controller包

包中创建CartController类

代码如下

@RestController
@RequestMapping("/base/cart")
@Api(tags = "购物车管理")
public class CartController {@Autowiredprivate ICartService cartService;@PostMapping("/add")@ApiOperation("新增购物车商品")public JsonResult cartAdd(CartAddDTO cartAddDTO){cartService.cartAdd(cartAddDTO);return JsonResult.ok("新增购物车商品完成!");}@PostMapping("/delete")@ApiOperation("删除购物车商品")@ApiImplicitParams({@ApiImplicitParam(value = "用户ID",name="userId",example = "UU100"),@ApiImplicitParam(value = "商品编号",name="commodityCode",example = "PC100")})public JsonResult deleteUserCart(String userId,String commodityCode){cartService.deleteUserCart(userId,commodityCode);return JsonResult.ok("删除购物车商品完成!");}}

重启Cart模块

测试localhost:20001/doc.html

发送新增购物车的请求测试

然后测试删除购物车的功能

2.9创建Order模块

2.9.1创建项目

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>cn.tedu</groupId><artifactId>csmall</artifactId><version>0.0.1-SNAPSHOT</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>cn.tedu</groupId><artifactId>csmall-order</artifactId><version>0.0.1-SNAPSHOT</version><name>csmall-order</name><description>Demo project for Spring Boot</description><dependencies><!--web实例--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--mybatis整合springboot--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><!-- alibaba 数据源德鲁伊 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--all-common依赖--><dependency><groupId>cn.tedu</groupId><artifactId>csmall-commons</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!--在线api文档--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId></dependency><!--  Nacos注册依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies></project>

删除test文件夹

删除application.properties文件

可以将cart模块的application.yml文件和application-dev.yml复制过来

但是要修改需要变化的属性

application.yml端口号修改

server:port: 20002

application-dev.yml修改项目名称

application:name: nacos-order

2.9.2config配置

直接复制cart模块的config包到当前order模块即可

修改内容如下

knife4j配置主要修改:

    /*** 【重要】指定Controller包路径*/private String basePackage = "cn.tedu.csmall.order.controller";/*** 分组名称*/private String groupName = "base-order";/*** 主机名*/private String host = "http://java.tedu.cn";/*** 标题*/private String title = "酷鲨商城项目案例在线API文档--基础order-web实例";/*** 简介*/private String description = "构建基础order-web项目,实现订单管理";

Mybatis配置修改如下

@Configuration
// Mybatis框架扫描mapper包接口的注解
@MapperScan("cn.tedu.csmall.order.mapper")
public class MybatisConfiguration {
}

2.10编写新增订单功能

2.10.1开发持久层

创建mapper包

创建OrderMapper接口

添加新增订单方法

@Repository
public interface OrderMapper {// 新增订单的方法@Insert("insert into order_tbl(user_id,commodity_code,count,money) " +"values(#{userId},#{commodityCode},#{count},#{money})")void insertOrder(Order order);
}

2.10.2开发业务逻辑层

创建service包

包中创建IOrderService

public interface IOrderService {// 声明新增订单的方法void orderAdd(OrderAddDTO orderAddDTO);
}

创建service.impl包

包中创建OrderServiceImpl

@Service
@Slf4j
public class OrderServiceImpl implements IOrderService {@Autowiredprivate OrderMapper orderMapper;@Overridepublic void orderAdd(OrderAddDTO orderAddDTO) {// 1.减少订单中商品的库存数(要调用stock模块的方法)// 2.删除订单中选中的购物车的商品(要调用cart模块的方法)// 3.执行将orderAddDTO中的信息新增到订单表中的功能// 实例化一个Order对象Order order=new Order();BeanUtils.copyProperties(orderAddDTO,order);// 执行新增orderMapper.insertOrder(order);log.info("新增的订单信息为{}",order);}
}

2.10.3开发控制层

创建controller包

创建OrderController类

@RestController
@RequestMapping("/base/order")
@Api(tags = "订单管理")
public class OrderController {@Autowiredprivate IOrderService orderService;@ApiOperation("新增订单")@PostMapping("/add")public JsonResult orderAdd(OrderAddDTO orderAddDTO){// 调用业务逻辑层orderService.orderAdd(orderAddDTO);return JsonResult.ok("新增订单完成!"); }}

启动order项目

检查nacos注册状态和knife4j测试新增订单效果

先启动nacos再启动order

2.11创建stock模块

2.11.1项目搭建

创建csmall-stock

修改父项目pom文件,父子相认

子项目pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>cn.tedu</groupId><artifactId>csmall</artifactId><version>0.0.1-SNAPSHOT</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>cn.tedu</groupId><artifactId>csmall-stock</artifactId><version>0.0.1-SNAPSHOT</version><name>csmall-stock</name><description>Demo project for Spring Boot</description><dependencies><!--web实例--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--mybatis整合springboot--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><!-- alibaba 数据源德鲁伊 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--all-common依赖--><dependency><groupId>cn.tedu</groupId><artifactId>csmall-commons</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!--在线api文档--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId></dependency><!--  Nacos注册依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies></project>

删除test测试文件夹

删除application.properties文件

复制order\cart模块的application.yml和application-dev.yml文件

修改端口号和项目名称

2.11.2config配置

从order\cart模块复制config包

修改MybatisConfiguration\Knife4jConfiguration对应的包名

2.12编写减少库存功能

2.12.1开发持久层

UPDATE stock_tbl SET COUNT=COUNT-10
WHERE commodity_code='PC100' AND COUNT>=10

mapper包下StockMapper

@Repository
public interface StockMapper {// 修改(减少)指定商品库存数的方法@Update("UPDATE stock_tbl SET COUNT=COUNT-#{reduceCount} " +" WHERE commodity_code=#{commodityCode} AND COUNT>=#{reduceCount}")void updateStockByCommodityCode(@Param("commodityCode") String commodityCode,@Param("reduceCount") Integer reduceCount);}

2.12.2开发业务层

在service包下创建IStockService

public interface IStockService {// 减少库存数的业务逻辑层方法void reduceCommodityCount(StockReduceCountDTO stockReduceCountDTO);
}

service.impl包下创建StockServiceImpl

@Service
@Slf4j
public class StockServiceImpl implements IStockService {@Autowiredprivate StockMapper stockMapper;@Overridepublic void reduceCommodityCount(StockReduceCountDTO stockReduceCountDTO) {// 调用stockMapper减少库存数的方法// 参数1:商品编号// 参数2:减少的库存数stockMapper.updateStockByCommodityCode(stockReduceCountDTO.getCommodityCode(),stockReduceCountDTO.getReduceCount());log.info("库存减少已执行");}
}

2.12.3开发控制层

controller包

StockController类

@RestController
@RequestMapping("/base/stock")
@Api(tags = "库存管理")
public class StockController {@Autowiredprivate IStockService stockService;@PostMapping("/reduce/count")@ApiOperation("减少商品库存数")public JsonResult reduceCommodityCount(StockReduceCountDTO stockReduceCountDTO){// 调用业务逻辑层stockService.reduceCommodityCount(stockReduceCountDTO);return JsonResult.ok("库存减少已执行!");}}

启动服务测试成功即可

3.Dubbo概述

3.1什么是RPC

RPC是Remote Procedure Call的缩写 翻译为:远程过程调用

目标是为了实现两台(多台)计算机\服务器,相互调用方法\通信的解决方案

RPC只是实现远程调用的一套标准

该标准主要规定了两部分内容

1.通信协议

2.序列化协议

为了方便大家理解RPC,下面的图片帮助理解

上面图是老婆和老公在家的时,老婆让老公洗碗的调用流程

这个流程可以理解为项目内的功能的调用,类似面向对象编程实例化对象,调用方法的过程

但是这个调用关系如果是远程的,意思是老婆和老公现在是两个不同的项目

我们看到上图中,远程调用必须借助一个通信设备,图片中是手机

3.1.1通信协议

通信协议指的就是远程调用的通信方式

实际上这个通知的方式可以有多种

例如:写信,飞鸽传书,闪送等等

在程序中,通信方式也有多种

3.1.2序列化协议

序列化协议指通信内容的格式,双方都要理解这个格式

上面的图片中,老婆给老公发信息,一定是双方都能理解的信息

发送信息是序列化过程,接收信息需要反序列化

程序中,序列化的方式也是多种的

3.2什么是Dubbo

上面对RPC有基本认识之后,再学习Dubbo就简单了

Dubbo是一套RPC框架。既然是框架,我们可以在框架结构高度,定义Dubbo中使用的通信协议,使用的序列化框架技术,而数据格式由Dubbo定义,我们负责配置之后直接通过客户端调用服务端代码。

可以说Dubbo就是RPC概念的实现

Dubbo是SpringCloudAlibaba提供的框架

能够实现微服务相互调用的功能!

3.3Dubbo的发展历程

我们学习的Dubbo指的都是2.7之后的版本

是能够和SpringCloudAlibaba配合使用的

Dubbo历程

2012年底dubbo停止更新后到2017年dubbo继续更新之前

2015SpringCloud开始兴起,当时没有阿里的框架

国内公司要从SpringCloud和Dubbo中抉择使用哪个微服务方案

在2012年dubbo停止更新后国内的当当网在dubbo的基础上开发了dubboX框架,并进行维护

2019年后,SpringCloud和Dubbo才能共同使用

3.4Dubbo对协议的支持

RPC框架分通信协议和序列化协议

Dubbo框架支持多种通信协议和序列化协议,可以通过配置文件进行修改

Dubbo支持的通信协议

  • dubbo协议(默认)
  • rmi协议
  • hessian协议
  • http协议
  • webservice
  • .....

支持的序列化协议

  • hessian2(默认)
  • java序列化
  • compactedjava
  • nativejava
  • fastjson
  • dubbo
  • fst
  • kryo

Dubbo默认情况下,支持的协议有如下特征

  • 采用NIO单一长链接
  • 优秀的并发性能,但是处理大型文件的能力差

Dubbo方便支持高并发和高性能

3.5Dubbo服务的注册与发现

在Dubbo的调用过程中,必须包含注册中心的支持

注册中心推荐阿里自己的Nacos,兼容性好,能够发挥最大性能

但是Dubbo也支持其它软件作为注册中心(例如Redis,zookeeper等)

服务发现,即消费端自动发现服务地址列表的能力,是微服务框架需要具备的关键能力,借助于自动化的服务发现,微服务之间可以在无需感知对端部署位置与 IP 地址的情况下实现通信。

上面RPC的示例中,老婆就是服务的消费端,她能发现老公具备的服务

如果老婆调用了老公的服务,就是完成了Dubbo调用

consumer服务的消费者,指服务的调用者(使用者)也就是老婆的位置

provider服务的提供者,指服务的拥有者(生产者)也就是老公的位置

在Dubbo中,远程调用依据是服务的提供者在Nacos中注册的服务名称

一个服务名称,可能有多个运行的实例,任何一个空闲的实例都可以提供服务

常见面试题:Dubbo的注册发现流程

1.首先服务的提供者启动服务时,将自己的具备的服务注册到注册中心,其中包括当前提供者的ip地址和端口号等信息,Dubbo会同时注册该项目提供的远程调用的方法

2.消费者(使用者)启动项目,也注册到注册中心,同时从注册中心中获得当前项目具备的所有服务列表

3.当注册中心中有新的服务出现时,会通知已经订阅发现的消费者,消费者会更新所有服务列表

4.RPC调用,消费者需要调用远程方法时,根据注册中心服务列表的信息,只需服务名称,不需要ip地址和端口号等信息,就可以利用Dubbo调用远程方法了

我们当前csmall项目的远程调用关系如下

JSD-2204-使用Idea启动Nacos-创建csmall项目-Dubbo-Day03相关推荐

  1. JSD-2204-创建csmall项目-Day02

    1.创建csmall项目 我们要搭建一个项目,用于学习各种微服务知识 搭建的过程有很多新的标准,需要我们掌握和学习 发给大家的3个csmall的项目 csmall-finish.zip:这个项目是当前 ...

  2. Linux启动nacos成功日志_Spring Cloud Alibaba基础教程:使用Nacos作为配置中心

    通过本教程的前两篇: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方 ...

  3. Linux启动nacos成功日志_微服务系列之Nacos配置中心

    Nacos 介绍 Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理.英文全称 Dynamic Naming and Configuration Service ...

  4. 支持Dubbo生态发展,阿里巴巴启动新的开源项目 Nacos

    摘要: 上周六的Aliware技术行上海站Dubbo开发者沙龙上,阿里巴巴高级技术专家郭平(坤宇)宣布了阿里巴巴的一个新开源计划,阿里巴巴计划在7月份开启一个名叫Nacos的新开源项目, 在活动演讲中 ...

  5. linux 启动nacos报错_Spring Cloud:Alibaba 之 Nacos

    上个月最后一天的凌晨,Spring Cloud Alibaba 正式入驻了 Spring Cloud 官方孵化器,并在 maven 中央库发布了第一个版本. 目前 Spring Cloud Aliba ...

  6. (转)支持Dubbo生态发展,阿里巴巴启动新的开源项目 Nacos

    贡献Dubbo生态,阿里Nacos开源计划 在上周六的Aliware技术行上海站Dubbo开发者沙龙上,阿里巴巴高级技术专家郭平(坤宇)宣布了阿里巴巴的一个新开源计划,阿里巴巴计划在7月份开启一个名叫 ...

  7. Linux启动nacos成功日志_nacos初体验踩坑与填坑篇

    点击上方"蓝字"关注我们 最近在看 RuoYi 的分布式微服务架构权限管理系统,RuoYi 的注册中心和配置中心都是采用 alibaba 的 nacos,本文主要介绍使用 Wind ...

  8. CCommandLineInfo详解-启动不创建新文档【对单文档有问题?】

    问:其实这里面还有问题,如果是单文档应用程序,这样做会出错.虽然编译连接都能通过,但是调试运行是到这里提示出错而中断了. 错误:在winocc.cpp文件的这句话:ASSERT(::IsWindow( ...

  9. idea创建web项目运行报404错误_使用IDEA新建Web工程启动报404的错误

    新换了一个项目组被人吐槽配置文件都能写错,所以打算从头开始一步步搭建一个项目,包含ssm基础框架.mongodb工具类.redis工具类.jsf配置.log配置等 今天先来搭建一个web工程.工程搭建 ...

最新文章

  1. ylb:表的结构的修改和基本约束
  2. 如何用15天摸清一个新的行业?
  3. Windows Server 2008 R2 主域控制器委派DNS到子域控控制器
  4. Android XML文件读写
  5. stm32控制步进电机程序
  6. VS绿豆沙屏幕保护色参数设置
  7. java 发送html格式邮件 样式混乱解决
  8. php ci log,PHP框架CI CodeIgniter 的log_message开启日志记录方法
  9. 汇编语言基本概念汇总
  10. Nginx HTTP 健康检查
  11. 通过 BTC Relay 来实现链与链的连接
  12. 获取ITU-U各种协议标准
  13. 学生版计算机怎样能玩数字游戏,数学学习游戏电脑版
  14. 三参数坐标转换matlab,Coordinate-conversion
  15. liunx 系统 一键安装
  16. 软件工程的前景与发展
  17. html计算书怎么导出,3D3S怎么出计算书 计算结果输出方法
  18. 提高教学效率的工具箱
  19. Unsigned与Signed关键字
  20. eclipse更改主题

热门文章

  1. 2022年好用又便宜蓝牙耳机推荐_平价学生党蓝牙耳机品牌
  2. 微信上的python训练营_用 Python 爬了爬自己的微信朋友(实例讲解)
  3. Kmeans算法概述
  4. vue2+vue3——107+
  5. php微信粉丝获取,PHP微信开发之同步粉丝
  6. Matlab中的sparse命令,matlab中的sparse命令
  7. Redis—安装与配置
  8. 错排问题之年会抽奖与抄送列表
  9. 一款简单强大的下载软件(freedownloadmanager)
  10. 数据库锁表的查询和处理