以下内容均来源于一个微服务初学者的实践,仅供参考。

微服务架构

首先启动 Spring Cloud Eureka 注册中心,其他部分都作为服务注册到 Eureka ,并通过注册的服务名互相访问。Spring Cloud Config 提供统一的配置信息,供其他服务读取。Provider 生产者服务不直接对外暴露,仅供 Consumer 消费者服务调用。用户通过 Spring Cloud Gateway 统一访问消费者服务。

创建 IDEA 多模块 Maven 项目

首先创建一个空 Maven 项目,然后右键项目 -> New Module ,选择继续创建空 Maven 模块或者使用 Spring Initializr 构建 Spring Cloud 模块。common模块用于存放公共的 lib ,如 dao 、model 、util 等。config-dev 存放配置文件,上传到 git 之后供 Spring Cloud Config 读取。

除了少数像 Spring Cloud Config 、Spring Cloud Gateway 这种独立应用,大部分非空模块都需要添加 spring-boot-starter-web 构建 Web 应用。下图是使用 IDEA 的 Spring Initializr 快速构建新模块。

下面贴上详细的配置文件和注解,bootstrap.yml 具有高优先级,会提前加载并且不会被 application.yml 覆盖,spring.cloud.config 需要配置在 bootstrap.yml 中,否则不能正常从配置中心获取配置信息。

Spring Cloud Eureka

application.yml

server:

port: 8081

spring:

application:

name: spring-eureka-server

eureka:

client:

# 单节点不需要注册服务自己

register-with-eureka: false

# 单节点不需要同步其他server

fetch-registry: false

serviceUrl:

defaultZone:

http://localhost:8081/eureka/

HobbyEurekaApplication.java

@SpringBootApplication

@EnableEurekaServer

public class HobbyEurekaApplication {}

Spring Cloud Config

application.yml

server:

port: 8082

spring:

application:

name: spring-config-server

# 优先加载带profile的配置文件,用于项目不同阶段配置信息切换

profiles:

active: dev

eureka:

client:

serviceUrl:

defaultZone:

http://localhost:8081/eureka/

application-dev.yml

spring:

cloud:

config:

server:

git:

# 测试能否正常读取 http://localhost:8082/database-1.yml

uri: http://xx.xxx.xxx.xxx:8091/root/hobby.git # 配置git仓库地址

searchPaths: config-dev # 配置仓库路径

username: SpringConfig # 访问git仓库的用户名

password: *********** # 访问git仓库的用户密码

default-label: master # 默认分支

HobbyConfigApplication.java

@SpringBootApplication

@EnableDiscoveryClient

@EnableConfigServer

public class HobbyConfigApplication {}

Spring Cloud Gateway

bootstrap.yml

spring:

cloud:

config:

discovery:

enabled: true

serviceId: spring-config-server

# 需要在bootstrap.yml中预先加载配置,否则application.yml中无法引用

name: gateway

eureka:

client:

serviceUrl:

defaultZone:

http://localhost:8081/eureka/

config-dev/gateway.yml

server:

port: 80

spring:

application:

name: spring-gateway

cloud:

gateway:

enabled: true

routes:

- id: test_consumer

uri: http://127.0.0.1:8084

predicates:

- Path=/consumer/**

filters:

# 去掉第一个前缀/consumer

- StripPrefix=1

HobbyGatewayApplication.java

@SpringBootApplication

@EnableDiscoveryClient

public class HobbyGatewayApplication {}

provider-xxx

在 Spring Cloud Gateway 的配置中已经展示过如何从 config-dev 配置仓库中读取配置文件。spring.cloud.config 和 eureka.client 都已经在 bootstrap.yml 中配置过,接下来不做赘述。多模块项目中扫描其他模块的 mybatis 文件需要做额外的配置。

application.yml

server:

port: 8083

spring:

application:

name: hobby-provider-test

mybatis:

# 数据库映射实体类包路径

type-aliases-package: com.fun.hobbycommon.entity

# mapper.xml扫描路径,classpath*扫描所有模块,默认无法读取hobby-common模块中的mapper.xml

mapper-locations: classpath*:/mapper/*.xml

HobbyProviderTestApplication.java

@SpringBootApplication

@EnableDiscoveryClient

// 扫描所有包内的component,否则IDEA解析不到common模块的组件,会报错,虽然不影响使用

@ComponentScan(basePackages={"com.fun"})

// 扫描mapper接口

@MapperScan(basePackages={"com.fun.hobbycommon.dao"})

public class HobbyProviderTestApplication {}

consumer-xxx

消费者调用生产者可以使用 Feign 声明式服务调用。

HobbyConsumerTestApplication.java

@SpringBootApplication

@EnableDiscoveryClient

@EnableFeignClients

public class HobbyConsumerTestApplication {}

TestFeignService.java

@FeignClient(name = "hobby-provider-test", path = "/test")

public interface TestFeignService {

// 访问 hobby-provider-test 服务的 /test/testQuery

@RequestMapping("/testQuery")

String testQuery();

}

TestServiceImpl.java

@Service

public class TestServiceImpl implements ITestService {

@Autowired

private TestFeignService testFeignService;

@Override

public String queryTest() {

// 声明式服务调用

return testFeignService.testQuery();

}

}

项目启动顺序

Spring Cloud Eureka >> Spring Cloud Config >> Spring Cloud Gateway >> 其他服务

Gitlab 搭建

微服务架构能够将各种服务解耦,单独部署,配合 devops 才能展现出真正的威力,否则运维的工作会苦不堪言。gitlab 目前已经集成了 devops 功能,只要在项目中添加.gitlab-ci.yml,push 到 Gitlab 之后就会自动执行配置的命令,这里简单介绍一下 gitlab 的安装部署。

CentOS7 自带的 Git 版本号是 1.8.3.1 ,需要更新,否则 Gitlab Runner 在进行自动构建的时候会报错 fatal: git fetch-pack: expected shallow list ,更新步骤如下:

# 删除旧版本 Git

sudo yum remove git

# 安装新版本 Git

sudo yum -y install https://packages.endpoint.com/rhel/7/os/x86_64/endpoint-repo-1.7-1.x86_64.rpm

sudo yum install git

修改 Gitlab 配置文件

配置文件的地址 /etc/gitlab/gitlab.rb

修改配置文件的操作:

# 停止 Gitlab

gitlab-ctl stop

# 修改配置文件

vim /etc/gitlab/gitlab.rb

# 根据配置文件重新配置

gitlab-ctl reconfigure

# 重启 Gitlab

gitlab-ctl restart

常用配置:

# git clone 的地址

external_url 'http://xx.xxx.xxx.xxx:8091'

# gitlab 仓库保存的位置

git_data_dirs({

"default" => { "path" => "/data/gujie/gitlab" }

})

# 邮箱配置,没有会导致 Gitlab 就不能发送邮件

gitlab_rails['smtp_enable'] = true

gitlab_rails['smtp_address'] = "smtp.163.com"

gitlab_rails['smtp_port'] = 465

gitlab_rails['smtp_user_name'] = "xxxxxxx@163.com"

gitlab_rails['smtp_password'] = "******"

gitlab_rails['smtp_domain'] = "163.com"

gitlab_rails['smtp_authentication'] = "login"

gitlab_rails['smtp_enable_starttls_auto'] = true

gitlab_rails['smtp_tls'] = true

gitlab_rails['smtp_openssl_verify_mode'] = 'none'

gitlab_rails['gitlab_email_from'] = "xxxxxxx@163.com"

user["git_user_email"] = "xxxxxxx@163.com"

idea 构建java 微服务_使用 IDEA 从 0 开始搭建 Spring Cloud 微服务相关推荐

  1. maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目

    项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...

  2. 《Spring Cloud 微服务架构进阶》读书笔记

    前页 随着 DevOps 和以 Docker 为主的容器技术的发展,云原生应用架构和微服 务变得流行起来. 云原生包含的内容很多,如 DevOps.持续交付.微服务.敏捷等 第一章,微服务架构介绍 架 ...

  3. 疯狂Spring Cloud微服务架构实战

    网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击"普通下载" ...

  4. 微服务(三) 【手摸手带你搭建Spring Cloud】 Ribbon 什么是负载均衡?spring cloud如何实现负载均衡?ribbon负载均衡有几种策略?Ribbon是什么?

    在上一章,我介绍了springcloud的eureka搭建.我们做了服务注册.最后我们还介绍了一些续约,失效剔除等参数配置.已经不需要再通过手动输入ip去访问服务,而是通过中心只需要通过服务名就可以获 ...

  5. Java之 Spring Cloud 微服务的 SpringCloud Config 配置中心(第四个阶段)【二】【SpringBoot项目实现商品服务器端调用】

    SpringCloud学习目录点击跳转对应的文章 Java之 Spring Cloud 微服务搭建(第一个阶段)[一][SpringBoot项目实现商品服务器端是调用] Java之 Spring Cl ...

  6. 视频教程-Spring Cloud微服务--入门到精通-Java

    Spring Cloud微服务--入门到精通 本系列课程由多位老师共同录制而成,旨在为想要学习Java的用户提供一套系统的成长方案. Java从入门到进阶 ¥59.00 立即订阅 扫码下载「CSDN程 ...

  7. spring cloud微服务分布式云架构 - common-service 项目构建过程

    欢迎大家和我一起学习spring cloud构建微服务云架构,我这边会将近期研发的spring cloud微服务云架构的搭建过程和精髓记录下来,帮助更多有兴趣研发spring cloud框架的朋友,大 ...

  8. spring cloud微服务_年后进大厂,必备这份微服务面试题:Dubbo+SpringBoot+Cloud

    Dubbo面试题 Dubbo与DubboX区别 Dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么? Dubbo中有哪些角色? Dubbo在安全机制方面是如 ...

  9. spring cloud微服务_面试败给微服务?别怕,我带你一起手撕Dubbo,SpringBoot与Cloud...

    面试居然败给微服务???这是个神马情况??没关系,这次我来带你一起总结Dubbo+Spring Boot+Spring Cloud,让我们一起手撕微服务!!! 01 微服务之Dubbo Dubbo 支 ...

最新文章

  1. 【仿去哪儿】滑动隐藏导航栏
  2. java生成自己定义的表ID
  3. Vivado无法双击打开xpr工程文件的解决办法
  4. MOBIUS:百度凤巢新一代广告召回系统
  5. (转载) Linux IO模式及 select、poll、epoll详解
  6. HH SaaS电商系统的采购功能模块设计
  7. ubuntu安装jdk_mysql_Ubuntu server 安装及jdk+mysql安装教程
  8. 风雨20年:我所积累的20条编程经验
  9. php二分法 冒泡 快速排序,PHP 常见算法【冒泡排序, 快速排序, 插入排序, 取舍排序, 二分法查找, .】...
  10. sql server,mysql,oracle 获取上一月时间
  11. 精品:Spline导数及曲率计算(判断曲线的弯曲程度)
  12. 内存中inode与磁盘中inode
  13. 怎么重装python_如何部署Jupyter Notebook用于交互式Python开发?
  14. ThinkPad T480不拆电脑后盖更换键盘
  15. 修复苹果电脑运行过程中出现的声音、触摸板失灵、键盘错键、光标乱窜问题
  16. python智能推荐系统教程_最新Python黑马头条推荐系统项目视频教程(精讲)
  17. moectf chall 数独题 z3约束器求解
  18. 对不起 我追不上你了。
  19. vuecli2+axios 设置多个域名代理
  20. Google中国招聘三大标准 实干、内功与人品

热门文章

  1. PHP数组合并的常见问题
  2. Java Web的分页工具类
  3. golang 学习心得一(开发环境搭建过程中一些坑)
  4. 查找命令find和其他常用查找命令
  5. CakePHP中文手册【翻译】-Cake Blog创建指南
  6. Jeesite 自定义api接口 404 访问不到页面
  7. [转]JAVA 在main中访问内部类、方法等
  8. [redis] Redis 配置文件置参数详解
  9. Win32 SDK - 打开文件对话框
  10. 系统安装-黑苹果之路