搭建公司新产品的框架,这种艰巨的工作,当然是交给优秀的我来做了,骄傲下,哈哈。
最终选型为 https://spring.io/projects/spring-cloud-alibaba。
初次使用 spring-cloud-alibaba并不容易,看了各种教程最终发现还是官方文档最靠谱,希望这篇博客能成为仅次于官方的安装教程。
本篇博客旨在帮助新了解该框架的同学们,能够快速安装使用。
以下是搭建的流程及重点内容:
nacos
(1)安装nacos
nacos的官方文档:https://nacos.io/en-us/docs/quick-start.html
其中下载安装包为:
Select the latest stable version from https://github.com/alibaba/nacos/releases
(2)运行:
我这边下载的是最新zip安装包
解压:unzip nacos-server-$version.zip
进入操作目录:cd nacos/bin
启动:sh startup.sh -m standalone (后面参数代表单机模式运行)
关闭服务:sh shutdown.sh
(3)服务与配置管理
服务注册
curl -X POST'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
服务发现
curl -X GET'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
发布配置
curl -X POST“ http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld”
获取配置
curl -X GET“http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.config&group=test”
(4)启动后登录
用户名:nacos
密码:nacos
登录之后,哇塞,这不就是阿里云的后台嘛,哈哈,浓浓的阿里风格。
(5)作为配置中心与Spring整合,dataId与nacos后台保持一致
import com.alibaba.nacos.api.annotation.NacosProperties; import com.alibaba.nacos.spring.context.annotation.config.EnableNacosConfig; import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient @EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848")) @NacosPropertySource(dataId = "nacos-config", autoRefreshed = true) public class NacosConfigApplication { public static void main(String[] args) { SpringApplication.run(NacosConfigApplication.class, args); } }
在具体的业务中使用
@RestController
@RequestMapping
public class ConfigController {
@NacosValue(value = "${project}", autoRefreshed = true)
private String project;
@GetMapping("/name")
public String name() {
return project;
}
}
(6)解决nacos打印日志过多的问题,更改这个配置:
server.tomcat.accesslog.enabled=false
Gateway
网关,用于负载、分流等。
这个比较简单,目前我用此主要是做了token验证、流量分发等。
Elasticsearch
集成es,下载及安装操作在我之前的博客中写过。
(1)添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 可以只添加上方两个依赖即可 以下lombok为了简化代码,建议使用 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
(2)配置yml,用于连接es
# elasticsearch spring.elasticsearch.rest.uris = http://39.100.88.230:9200 spring.elasticsearch.rest.connection-timeout = 5s
(3)创建Bean
//通过这个注解可以声明一个文档,指定其所在的索引库和type @Document(indexName = "testbean", type = "docs") @Data public class TestBean implements Serializable { //这个ID是必须的,作为文档的唯一标示 @ID private Long id; private String content; }
(4)es接口,用于业务实现
// 继承CRUD,第一个泛型是实体类类型,第二个泛型是id的类型 public interface TestRepository extends ElasticsearchRepository<TestBean, Long> { }
RocketMQ
(1)下载RocketMQ
http://rocketmq.apache.org/dowloading/releases/
(2)安装
unzip rocketmq-all-4.7.1-source-release.zip cd rocketmq-all-4.7.1/
# 官方文档此处要编译,我下载的二进制包没有编译也可以启动。 mvn -Prelease-all -DskipTests clean install -U cd distribution/target/rocketmq-4.7.1/rocketmq-4.7.1
(3)启动服务
Start Name Server > nohup sh mqnamesrv & > tail -f ~/logs/rocketmqlogs/namesrv.log The Name Server boot success... Start Broker > nohup sh bin/mqbroker -n localhost:9876 & > tail -f ~/logs/rocketmqlogs/broker.log The broker[%s, 172.30.30.233:10911] boot success...
(4)关闭服务
> sh bin/mqshutdown broker The mqbroker(36695) is running... Send shutdown request to mqbroker(36695) OK > sh bin/mqshutdown namesrv The mqnamesrv(36664) is running... Send shutdown request to mqnamesrv(36664) OK
(5)集成到Spring服务中
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-stream-rocketmq</artifactId> </dependency>
(6)常见问题,Java_Home
JAVA_HOME 环境变量未配置,可设置RocketMQ的JDK环境 , 打开bin目录下 runserver.sh 和 runbroker.sh, 将设置JAVA_HOME的第二三行注释掉,在第一行设置JDK的安装目录。如下所示: [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home #[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java #[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!
Redis
集成es,下载及安装操作在我之前的博客中写过。
Sentinel
面向微服务的轻量级流量控制框架,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
项目还处于开发阶段,暂时没有集成。
SkyWalking
Skywalking分布式追踪与监控,由于还没有编写业务,暂时没有集成。