10分鍾快速上手 SpringCloudAlibaba(nacos注冊中心)


搭建公司新產品的框架,這種艱巨的工作,當然是交給優秀的我來做了,驕傲下,哈哈。

最終選型為 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)啟動后登錄

http://localhost:8848/nacos

用戶名: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分布式追蹤與監控,由於還沒有編寫業務,暫時沒有集成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM