搭建公司新產品的框架,這種艱巨的工作,當然是交給優秀的我來做了,驕傲下,哈哈。
最終選型為 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分布式追蹤與監控,由於還沒有編寫業務,暫時沒有集成。