【Zero to One系列】springcloud微服务集成nacos,形成分布式系统

奋斗吧
奋斗吧
擅长邻域:未填写

标签: 【Zero to One系列】springcloud微服务集成nacos,形成分布式系统

2023-06-01 18:23:28 128浏览

首先,通过创建feign接口类,我这边的项目结构中,有一个common模块。首先,引入相关的nacos依赖,我这边是微服务的系统架构,所以nacos基本很多模块都会引入,我是放在了common包的pom文件中,大家也可以放在root级的pom文件内。然后,在user服务中,就可以通过@resource等注解引入feign接口类,调用send服务中的接口啦。然后,也可以再配置列表中,配置自己需要定义的配置化文件,供后续的项目中读取使用。,记住这个一定要加上,否则启动服务,会因找不到feign的接口类而报错。

前期回顾:

【Zero to One系列】在WSL linux系统上,使用docker运行Mysql与Nacos

1、Nacos配置设置

先在nacos创建命名空间,如下图操作:

 创建完成后,服务列表配置列表,就都会出现如图的tab:

 然后,也可以再配置列表中,配置自己需要定义的配置化文件,供后续的项目中读取使用。此处暂不做说明,这个后续章节再细说,如何使用。


2、项目依赖于配置引入

首先,引入相关的nacos依赖,我这边是微服务的系统架构,所以nacos基本很多模块都会引入,我是放在了common包的pom文件中,大家也可以放在root级的pom文件内。依赖包如下:

<dependencies>

	<!-- 服务发现依赖 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2.2.5.RELEASE</version>
    </dependency>

    <!-- 服务注册与配置依赖 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>2.2.5.RELEASE</version>
    </dependency>

</dependencies>

依赖引入后,需要在对应的微服务模块项目中,配置对应的信息,具体如下:

服务发现配置,使用的是bootstrap.yml文件,此处需要注意,必须使用bootstrap的文件,此配置优先级最高,不然后续服务启动,会注册不到对应的命名空间内

spring:
  cloud:
    nacos:
      discovery:
        server-addr: nacos-server-ip:8848
        namespace: a663dc6b-98ff-4518-9a06-ffb3e3c4b697
        group: ***-dev

服务注册配置(也可以用yaml配置,个人习惯而定):

spring.cloud.nacos.config.server-addr=nacos-server-ip:8848
spring.cloud.nacos.config.namespace=a663dc6b-98ff-4518-9a06-ffb3e3c4b697
spring.cloud.nacos.config.group=***-dev
spring.cloud.nacos.config.file-extension=yaml

在服务的启动类,加上相应的注解,如下:

@EnableDiscoveryClient
@SpringBootApplication
public class ***Application {

	public static void main(String[] args) {
		SpringApplication.run(***Application.class, args);
	}

}

然后就可以启动,看看效果,先看启动日志打印:

再看看nacos注册管理界面:

 

至此,服务nacos微服务注册就完成啦。。

3、 微服务间的互相调用

        首先,通过创建feign接口类,我这边的项目结构中,有一个common模块。我会将一些,通用性的东西,放在此模块中。feign也是如此,各个模块都会相互调用。所以创建一个feign接口的目录,如com.***.common.feign,然后创建被调用服务的feign接口类,如下:

package com.***.common.feign;

import com.***.common.bean.ResultBean;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;


@FeignClient(name = "${sys.serviceName.send}",path = "${sys.serviceContext.send}")
public interface SendFeignClient {
	
	@RequestMapping(value = "/sms/sendMessage",method = RequestMethod.POST)
	public ResultBean sendSMS();
	
}

然后,在调用服务的启动类上,加上如下注解:

package com.***.***;

import com.***.common.constant.CommonConstant;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;

@EnableDiscoveryClient
@EnableFeignClients(basePackages = {CommonConstant.FEIGN_PACKAGE})
@SpringBootApplication
public class ***Application {

	public static void main(String[] args) {
		SpringApplication.run(***Application.class, args);
	}

}

此处的CommonConstant.FEIGN_PACKAGE 就是指向上面的com.***.common.feign,记住这个一定要加上,否则启动服务,会因找不到feign的接口类而报错。。

现在我们启动2个微服务,然后通过服务user调用服务send,如下都注册到nacos服务器后:

然后,在user服务中,就可以通过@resource等注解引入feign接口类,调用send服务中的接口啦。。调用效果我就不演试了,亲测是可用的。。

        本次的微服务通过nacos注册集成与调用,至此就结束啦。。至此,微服务的基本架构,就大体已经成形啦。。后续,就是一些拓展性的架构建设了。。例如添加gateway网关、hystrix熔断器等等。。请关注我后续相关的博文输出吧,,加油!!!

好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695