Nacos

微服务开发实战,一个案例,手把手带你入门

淺唱寂寞╮ 提交于 2020-01-07 01:19:25
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 平日里,都是看别人的文章,虽开公众号写了不少,但像样的不多。年末了,年终总结也没来得及写,为了输出点像样的东西,立刻就着手这个系列。<span style="color:orangered;">一个键一个字母的敲,边敲边写,文章还在持续更新中,直至完整。</span>相信通过这个系列的系统练习,能有一个大跨步的提升。 专栏简介(是什么?) 结合SpringCloud、SpringCloudAlibaba、Dubbo等开源套件,基于某商场停车业务需求,进行微服务开发实战,力争通过一个案例的实操,掌握微服务架构中常用的技能点,轻松入门。 为什么要写这个专栏(为什么?) 微服务近两年的火热,也将很多公司的架构慢慢转向微服务,但要直接上手微服务,还需要能过实操演练,不断提升,才能在工作中游刃有余。 网络上相关资源很多,但大多散乱无章,不成体系,不利于系统性掌握,无法一步步的深入其中,更不能深刻掌握各个组件在项目中实际融合情况。 虽然也有一些案例,但缺少相关的文档细节描述,对初学者而言,仅靠阅读代码,难免会一知半解。于是,我就琢磨写一个贴合实际场景的小例子,业务无须很复杂,能将这一套技术体系串连起来,自己可以跟着动手实操,通过一步一步的上手,加深对技术栈的理解。 通过本专栏要达成什么目标(到哪里去?)

SpringCloud War 包部署导致服务未正常注册到 Nacos 问题

情到浓时终转凉″ 提交于 2019-12-30 21:15:53
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最近把一个 SpringBoot 项目接入了微服务,使用 SpringBoot 2.1.9.RELASE 和 SpringCloud Greewich.SR3 。本地测试都正常,但是上线后,出现了一个这样一个情况: 日志未出现 Nacos Registery 类似的语句,也没有任何异常信息,就像是压根就没有配置微服务一样。 检查了配置文件,正常 本地测试,正常注册 后来找组长帮忙看了一下,发现是 war 包部署的问题: SpringCloud 项目打 war 包部署时,也就是使用外部 Tomcat 部署,其启动命令、端口等是由外部容器 Tomcat 配置的,而 Nacos 或者其他服务注册方式需要当前项目的端口号用于注册微服务。 以 Nacos 为例,其自动注册微服务的类是 NacosAutoServiceRegistration,我们看一下它的源码: public class NacosAutoServiceRegistration extends AbstractAutoServiceRegistration<Registration> { private NacosRegistration registration; @Deprecated public void setPort(int port) {

Nacos安装教程

百般思念 提交于 2019-12-27 15:09:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Nacos官网: https://nacos.io/zh-cn/ 一.下载(linux/windows版): https://github.com/alibaba/nacos/releases 二.Windows版解压: 三.进入bin目录: 四.双击运行: 默认端口:8848(珠穆朗玛峰高度) 修改端口号可以在conf目录下修改: 部分默认配置: 五.浏览器进入127.0.0.1:8848/nacos (默认地址)访问: 登录页默认账号以及密码都为:nacos 首页: 二、docker下安装 1. 拉取镜像 docker pull nacos/nacos-server 2. 启动镜像 docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server nacos登陆地址:http://localhost:8848/nacos/index.html 默认账号密码是nacos/nacos 上面是nacos中mysql 需要执行的脚本,见下方脚本 3.mysql 搭配nacos ,作为nacos 的配置数据,需要在nacos 中加入mysql的需要加入对应的配置 可以在Docker for Mac 工具中

Spring Cloud Alibaba 实战(十二)

做~自己de王妃 提交于 2019-12-16 00:23:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> > 本章主要内容是:使用Nacos管理配置以及实现配置管理的原因,配置如何管理以及动态刷新和最佳实现总结,最后是Nacos配置刷新原理解读 该技术类似于Spring Cloud Config 1 配置管理的意义 项目痛点 > 不同环境 ,不同配置 > 配置属性动态刷新 为了解决痛点,常用方案是引入配置服务器,架构如下: 引入依赖 写配置(约定大于配置),要谨遵如下映射关系图哦 创建新的bs.yml配置文件 在NACOS操作面板配置 启动内容中心 2 配置的动态刷新 修改配置后,应用可以动态刷新配置,而不需要重启应用 添加@RefreshScope注解即可 回滚的Bug(不要回滚到初始状态! Nacos 1.2会解决) https://github.com/alibaba/nacos/issues/186 https://qithub.com/alibaba/nacos/issues/434 > 可以尽量避免使用历史版本,而直接修改配置 3 共享配置 3.1 相同应用内 所指定的大于通用的 3.2 不同应用间 比如这段配置在用户/内容中心都有,可以将其交给nacos管理共享配置 下面看NACOS配置共享的两种方案: shared-detaids ext-config 优先级 shared-dataids <

针对alibaba的分布式事务组件使用说明

半城伤御伤魂 提交于 2019-12-13 17:05:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 分布式事务应用搭建 系统采用alibaba系统的springcloud,分布式事务采用seata来进行管理,需要进行以下配置操作。 下列操作,都是针对centos7以上版本 linux进行的操作 安装nacos应用服务器 下载对应版本的nacos安装包,目前采用的是1.1.3 下载地址: https://github.com/seata/seata/releases 下载对应操作系统版本 nacos-server-1.1.3.tar.gz 将文件进行解压: Tar –zxvf nacos-server-1.1.3.tar.gz 注意:必须在安装jdk1.8以上版本上进行运行此应用 启动nacos命令 打开bin目录执行以下命令 ./startup.sh –m standalone(单机模式运行) 需要将8848端口进行开放 firewall-cmd --zone=public --add-port=8848/tcp --permanent firewall-cmd --reload 安装jdk 下载对应的jdk安装文件,目前采用的版本是1.8.0_232 下载地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads

白话讲解微服务注册发现及负载均衡

ぃ、小莉子 提交于 2019-12-12 08:02:09
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、公益图书馆例子 笔者不想直接用专业的术语来说明“微服务注册与发现”,所以我们来看生活中的一个案例:“公益图书馆”。随着人们生活水平的不断提高,追求精神食粮的朋友也越来越多。笔者曾经在一些城市看见过公益图书馆,其运行逻辑是:一些公益组织和个人提供一块场所,然后由组织内的人向图书馆内捐书。捐出的书越多,一段时间内能够借阅的书也就越多。这种做法有助于大家分享图书、节约资金、交流读书心得。那我们来看一下几个关键环节: 捐书:组织内的人向公益图书馆捐书,是不是直接将书放到书架上就完事了呢?当然不是,是先向图书管理系统记录一下捐书的人、书名、捐书的时间等信息,再将书放到书架上。 借书:借书的人通常是通过图书管理系统的一个小程序查询图书,然后取书,全靠自觉。图书可能存在多个副本(多人捐的同一种书),借书的人会根据书籍状态择优选择。 这其中非常重要的一个角色就是图书管理系统及其小程序,为大家捐书、借书提供了数据支持和集中管理功能。 兼职图书管理员定期维护图书,将破损图书从图书管理系统中下架维护。 其实上面的这个“公益图书馆的例子”就是典型的服务注册与发现: 每一本图书就是一个服务,捐书的过程就是“服务注册”的过程。 借书的查询图书的过程就是“服务发现”的过程。 其中最重要的角色:图书管理系统、管理员及其小程序

SpringCloudAlibaba+Dubbo+Nacos实现RPC调用流程

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-09 15:52:02
前言:Cloud项目基于Greewith.SR2、AlibabaCloud基于2.1.0.RELEASE、Nacos环境基于Docker镜像搭建;主要讲述RPC跨服务调用流程 一、新建三个项目子模块:生产者、消费者、对外API(生产者和消费者同时引入API、生产者实现API、消费者调用生产者服务) 二、引入项目依赖创建SpringBoot应用,生产者和消费者注册到Nacos(服务注册正常) 三、API创建接口 1、实现方式有生产者处理 2、生产者引入当前API-pom文件依赖,编写实现方法 四、消费者调用生产者服务 五、调用流程,调用前保证服务注册成功,消费者部分业务需要使用到生产者的业务,实现跨服务调用,异常处理部分需要自定义来处理 来源: oschina 链接: https://my.oschina.net/wubiaowpBlogShare/blog/3139231

聊聊nacos的DistroConsistencyServiceImpl

情到浓时终转凉″ 提交于 2019-12-09 11:55:51
序 本文主要研究一下nacos的DistroConsistencyServiceImpl ConsistencyService nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/consistency/ConsistencyService.java public interface ConsistencyService { /** * Put a data related to a key to Nacos cluster * * @param key key of data, this key should be globally unique * @param value value of data * @throws NacosException * @see */ void put(String key, Record value) throws NacosException; /** * Remove a data from Nacos cluster * * @param key key of data * @throws NacosException */ void remove(String key) throws NacosException; /** * Get a data from Nacos

聊聊nacos的DataSyncer

僤鯓⒐⒋嵵緔 提交于 2019-12-09 11:53:29
序 本文主要研究一下nacos的DataSyncer DataSyncer nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DataSyncer.java @Component @DependsOn("serverListManager") public class DataSyncer { @Autowired private DataStore dataStore; @Autowired private GlobalConfig partitionConfig; @Autowired private Serializer serializer; @Autowired private DistroMapper distroMapper; @Autowired private ServerListManager serverListManager; private Map<String, String> taskMap = new ConcurrentHashMap<>(); @PostConstruct public void init() { startTimedSync(); } public void submit(SyncTask task,

聊聊nacos的DistroFilter

跟風遠走 提交于 2019-12-09 11:52:18
序 本文主要研究一下nacos的DistroFilter CanDistro nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/web/CanDistro.java @Retention(RetentionPolicy.RUNTIME) public @interface CanDistro { } CanDistro用于标识一个方法需要判断是否应该根据distro被重定向 DistroFilter nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/web/DistroFilter.java public class DistroFilter implements Filter { private static final int PROXY_CONNECT_TIMEOUT = 2000; private static final int PROXY_READ_TIMEOUT = 2000; @Autowired private DistroMapper distroMapper; @Autowired private SwitchDomain switchDomain; @Autowired private FilterBase filterBase