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;
    }

}

 

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分布式追踪与监控,由于还没有编写业务,暂时没有集成。

原文地址:https://www.cnblogs.com/pzyin/p/13256244.html