当前位置:   article > 正文

SpringCloud-alibabaNacos配置_ com.alibaba.cloud

com.alibaba.cloud spring-cloud-s

这里需要LINUX的相关知识,会比较长
Nacos可以做到服务注册,服务配置和消息总线这三种功能,可以认为是eureka+config+bus三个组件结合到了一起。
下载地址
先说一下2020年9月23日时nacos的最新版本是1.3.2。
大家可以到nacos的官网:**https://nacos.io/zh-cn/**进行下载

zip的是windows版本而tar.gz是linux版本
在这里插入图片描述
下载完成之后解压之后通过cmd进入nacos-server-1.3.2\nacos\bin文件夹
进入之后运行startup.cmd -m standalone可以进入nacos的单机模式,运行成功界面如下
在这里插入图片描述
运行成功之后我们可以在浏览器中输入http://localhost:8848来进入nacos
在这里插入图片描述
用户名和密码都是nacos

接下来我们要设计几个服务端和用户端来进行注册
首先我们先把alibaba的包导入到父文件中

        <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-alibaba-dependencies</artifactId>
          <version>2.2.2.RELEASE</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
        <dependency>
	        <groupId>com.alibaba.cloud</groupId>
	        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
	        <version>2.1.0.RELEASE</version>
	        <type>pom</type>
	        <scope>import</scope>
      </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

创建一个服务端,我命名为cloudalibaba-provider-payment9001
这是服务端的pom

    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--基础配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

这里是application.yml

server:
  port: 9001
spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
management:
  endpoints:
    web:
      exposure:
        include: "*"

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

这里的spring.cloud.nacos.discovery.server-addr是配置服务注册到哪个路径
yml里面management这一段是暴露所有服务当中的节点

这里是main方法

@SpringBootApplication
@EnableDiscoveryClient
public class AlibabaProviderMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(AlibabaProviderMain9001.class,args);
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

下面写了一个controller来一会给用户端调用

@RestController
public class NacosPaymentController {
    @Value("${server.port}")
    private String port;

    @GetMapping(value = "/payment/provider/nacos/{id}")
    public String getNacosInfo(@PathVariable("id") String id){
        return "nacos registry,serverport:"+port+"\t"+"id:"+id;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

为了弄集群,在创建一个一模一样的9002,就不重复了在这里插入代码片

下面我们创建用户端83
pom

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- SpringBoot整合Web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.qwf</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--日常通用jar包配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

application.yml

server:
  port: 83
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
  application:
    name: nacos-order-consumer

service-url:
  nacos-user-service: http://nacos-payment-provider
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

main


@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerMain83 {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerMain83.class,args);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

因为服务端和nacos链接还是用的resttemplate,所以我们先创建一个config

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

nacos里面有ribbon进行负载调节,所以可以直接使用@LoadBalanced注解

下面我们创建controller

@RestController
@Slf4j
public class OrderNacosController {
    @Resource
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String URL;

    @GetMapping(value = "/payment/consumer/nacos/{id}")
    public String getNacosInfo(@PathVariable("id") String id){
        return restTemplate.getForObject(URL+"/payment/provider/nacos/"+id,String.class);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

@Value("${service-url.nacos-user-service}")这个注解是向nacos获取调用名称为nacos-user-service的url链接

我们先运行9001和9002,再运行83
通过调用http://localhost:83/payment/consumer/nacos/1得到
在这里插入图片描述
而因为我们配置了@LoadBanlancer,nacos会让我们的访问轮询服务,下一次就是9001。
接下来就是配置nacos的config
我们先在nacos的配置列表中添加一个新的配置
注意,配置的名称要严格按照
s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name{spring.profile.active}-${spring.cloud.nacos.config.file-extension}

当spring.profile.active没有配置时可以为空,但是有时会发生莫名其妙的bug,以防万一还是配置起来
下面我先创建config
pom

    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--基础配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

bootstrap.yml

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yaml
        group: DEFAULT_GROUP
        namespace: 951f28df-d5d7-459b-a033-bd9bfe641315
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

spring.cloud.nacos.config.file-extension是导入的文件类型
spring.cloud.nacos.config.group 是文件属于哪个组
spring.cloud.nacos.config.namespace是文件属于哪个命名空间
spring.cloud.nacos.config.ext-config是可以再加载的config,而且是数组形式可以写多个。
例如spring.cloud.nacos.config.ext-config[0].data-id这个是传入配置文件名
spring.cloud.nacos.config.ext-config[0].group这个是传入配置所在的组
spring.cloud.nacos.config.ext-config[0].refresh这个是传入配置是否动态刷新

application.yml

spring:
  profiles:
    active: dev
  • 1
  • 2
  • 3

现在我们再来看上文提到的
spring.application.name-spring.profile.active-spring.cloud.nacos.config.file-extension

spring.application.name对应了bootstrap中的nacos-config-client
spring.profile.active对应了application中的dev
spring.cloud.nacos.config.file-extension对应了bootstrapyaml

所以我们创建的名称为nacos-config-client-dev.yaml
在这里插入图片描述
main方法


@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class,args);
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

controller方法

@RestController
@RefreshScope
public class NacosConfigClientController {
    @Value("${config.info}")
    private String configInfo;

    @GetMapping(value = "/config/info")
    public String getConfigInfo(){
        return configInfo;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

通过@RefreshScope来支持进行动态刷新,@Value("${config.info}")来获取配置文件nacos-config-client-dev.yaml的config.info的内容
在这里插入图片描述
接下来我们需要配置nacos集群来使我们的代码更加健壮
而nacos在windows系统下的集群支持不如linux,所以我们先来学习linux的环境配置
我选择的是CentOS8
CentOS8下载地址:https://www.centos.org/download/
我使用VMWare来构建虚拟机
VMWare下载地址:https://www.cr173.com/soft/68480.html

安装完成之后我们打开linux
使用root用户打开终端输入yum install java-1.8.0-openjdk -y
可以直接配置好java环境,可以输入java -version来观察java环境是否配置成功
在这里插入图片描述
接下来我们配置nginx环境
1.先测试一下linux有没有自带gcc
gcc -v在这里插入图片描述
没有gcc的话安装gcc:

yum install gcc -y
  • 1

2. 安装pcre和pcre-level库
pcre是perl库,包括Perl兼容的正则表达式库,而nginx的http模块使用正则表达式,所以需要安装。
安装命令:

yum install pcre pcre-devel -y
  • 1

3. zlib安装
zlib解压缩组件
安装命令:

yum install zlib zlib-devel -y
  • 1

4. OpenSSL
自然,没有OpenSSL,信息和裸奔没有区别了
安装命令:yum install OpenSSL OpenSSL-devel -y

上面都配置完成了,我们就可以安装Nginx了
1. 下载Nginx

wget http://nginx.org/download/nginx-1.18.0.tar.gz
  • 1

2020年9月23日当前稳定版本是1.18.0
可以到http://nginx.org/en/download.html来查看

2. 把Nginx解压到usr/local/java

tar -zxvf nginx-1.18.0.tar.gz
  • 1

3. 进入到usr/local/java/nginx-1.18.0

cd usr/local/java/nginx-1.18.0
  • 1

执行下面几条命令

./configure

make

make install
  • 1
  • 2
  • 3
  • 4
  • 5

接下来安装mysql
https://blog.csdn.net/weixin_42266606/article/details/80879571
这篇博客写的很详细,就不重复了
mysql安装完毕之后我们下载一个Navicat,是mysql的图形化界面,看起来可以更加直接明白
Navicat下载地址:http://www.navicat.com.cn/download/direct-download?product=navicat15-premium-cs.AppImage&location=2
下载完毕之后把软件放到opt当中,打开终端输入下面两行代码

chmod +x navicat15-premium-cs.AppImage

./navicat15-premium-cs.AppImage
  • 1
  • 2
  • 3

在这里插入图片描述
我们链接数据库之后先创建一个nacos_config数据库
创建完成之后调用usr/local/nacos-server-1.3.2/nacos/nacos-mysql.sql文件
这个数据库创建是为了nacos集群调用时的数据统一。

创建完成之后我们来调试nacos的配置
首先我们打开nacos所在文件的终端
我们先复制一份application.properties留一个备份

cp application.properties application.properties.init

  • 1
  • 2

复制的命名application.properties.init
之后我们在application.properties文件的末端添加这么一段代码

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql:127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
这里说明使用的数据库类型为mysql,有一个数据库,链接数据库的url地址,数据库的用户名和密码
之后配置cluster.conf.example
同理先备份一份

cp cluster.conf.example cluster.conf
  • 1

新文件为cluster.conf,我们配置cluster.conf
首先我们在终端中输入下面这段代码查看IP

hostname -i
  • 1

在这里插入图片描述
看到ip为127.0.0.1我们在cluster.conf中输入三个服务节点
127.0.0.1:3333
127.0.0.1:4444
127.0.0.1:5555
在这里插入图片描述
我们再修改nacos/bin/startup.sh
在这里插入图片描述

我们在while getopts “:m:f:s:c:p:” opt当中添加一个o代表port
再在选择里添加一个

o)
    PORT=$OPTARG;;
  • 1
  • 2

最后在最下方修改
原本代码

# start
echo "$JAVA ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 & 
nohup $JAVA ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 & 
echo "nacos is starting, you can check the ${BASE_DIR}/logs.start.out"
  • 1
  • 2
  • 3
  • 4

修改为
在这里插入图片描述
到此我们nacos集群配置修改完成

最后我们修改nginx配置
我们打开usr/local/nginx-1.18.0/conf/nginx.conf
自然要复制一份

cp nginx.conf nginx.conf.inix
  • 1

在这里插入图片描述

我们在server这边先修改默认监听端口80为1111,
再把root和index全部注掉,改为proxy_pass http://cluster
最后在server上方添加

upstream cluster {
    server 127.0.0.1:3333
    server 127.0.0.1:4444
    server 127.0.0.1:5555
}
  • 1
  • 2
  • 3
  • 4
  • 5

到此全部配置完成我们先运行nginx

./nginx -c usr/local/nginx/conf/nginx.conf
  • 1

移动到nacos再运行三个配置过的nacos

cd usr/local/nacos-server-1.3.2/nacos/bin

./startup.sh -o 3333
./startup.sh -o 4444
./startup.sh -o 5555
  • 1
  • 2
  • 3
  • 4
  • 5

接下来在虚拟机中的浏览器运行127.0.0.1:1111/nacos到此nacos集群配置完成

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/315213
推荐阅读
相关标签
  

闽ICP备14008679号