idea 构建java 微服务_使用 IDEA 从 0 开始搭建 Spring Cloud 微服务
以下内容均来源于一个微服务初学者的实践,仅供参考。
微服务架构
首先启动 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 微服务相关推荐
- maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目
项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...
- 《Spring Cloud 微服务架构进阶》读书笔记
前页 随着 DevOps 和以 Docker 为主的容器技术的发展,云原生应用架构和微服 务变得流行起来. 云原生包含的内容很多,如 DevOps.持续交付.微服务.敏捷等 第一章,微服务架构介绍 架 ...
- 疯狂Spring Cloud微服务架构实战
网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击"普通下载" ...
- 微服务(三) 【手摸手带你搭建Spring Cloud】 Ribbon 什么是负载均衡?spring cloud如何实现负载均衡?ribbon负载均衡有几种策略?Ribbon是什么?
在上一章,我介绍了springcloud的eureka搭建.我们做了服务注册.最后我们还介绍了一些续约,失效剔除等参数配置.已经不需要再通过手动输入ip去访问服务,而是通过中心只需要通过服务名就可以获 ...
- Java之 Spring Cloud 微服务的 SpringCloud Config 配置中心(第四个阶段)【二】【SpringBoot项目实现商品服务器端调用】
SpringCloud学习目录点击跳转对应的文章 Java之 Spring Cloud 微服务搭建(第一个阶段)[一][SpringBoot项目实现商品服务器端是调用] Java之 Spring Cl ...
- 视频教程-Spring Cloud微服务--入门到精通-Java
Spring Cloud微服务--入门到精通 本系列课程由多位老师共同录制而成,旨在为想要学习Java的用户提供一套系统的成长方案. Java从入门到进阶 ¥59.00 立即订阅 扫码下载「CSDN程 ...
- spring cloud微服务分布式云架构 - common-service 项目构建过程
欢迎大家和我一起学习spring cloud构建微服务云架构,我这边会将近期研发的spring cloud微服务云架构的搭建过程和精髓记录下来,帮助更多有兴趣研发spring cloud框架的朋友,大 ...
- spring cloud微服务_年后进大厂,必备这份微服务面试题:Dubbo+SpringBoot+Cloud
Dubbo面试题 Dubbo与DubboX区别 Dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么? Dubbo中有哪些角色? Dubbo在安全机制方面是如 ...
- spring cloud微服务_面试败给微服务?别怕,我带你一起手撕Dubbo,SpringBoot与Cloud...
面试居然败给微服务???这是个神马情况??没关系,这次我来带你一起总结Dubbo+Spring Boot+Spring Cloud,让我们一起手撕微服务!!! 01 微服务之Dubbo Dubbo 支 ...
最新文章
- 【仿去哪儿】滑动隐藏导航栏
- java生成自己定义的表ID
- Vivado无法双击打开xpr工程文件的解决办法
- MOBIUS:百度凤巢新一代广告召回系统
- (转载) Linux IO模式及 select、poll、epoll详解
- HH SaaS电商系统的采购功能模块设计
- ubuntu安装jdk_mysql_Ubuntu server 安装及jdk+mysql安装教程
- 风雨20年:我所积累的20条编程经验
- php二分法 冒泡 快速排序,PHP 常见算法【冒泡排序, 快速排序, 插入排序, 取舍排序, 二分法查找, .】...
- sql server,mysql,oracle 获取上一月时间
- 精品:Spline导数及曲率计算(判断曲线的弯曲程度)
- 内存中inode与磁盘中inode
- 怎么重装python_如何部署Jupyter Notebook用于交互式Python开发?
- ThinkPad T480不拆电脑后盖更换键盘
- 修复苹果电脑运行过程中出现的声音、触摸板失灵、键盘错键、光标乱窜问题
- python智能推荐系统教程_最新Python黑马头条推荐系统项目视频教程(精讲)
- moectf chall 数独题 z3约束器求解
- 对不起 我追不上你了。
- vuecli2+axios 设置多个域名代理
- Google中国招聘三大标准 实干、内功与人品