springCloud之服务发现与注册(nacos)

一、微服务的理解

        将一个大的项目拆分为多个小服务,服务拆分的颗粒度应按照业务需求,例如模块的读写频率,耦合度等。将服务统一交由nacos管理,可对性能有要求的服务做集群部署。当然服务太多也会影响维护,后续还需要学习Docker容器、K8s容器编排技术、服务的链路跟踪等。来保证服务的可持续运行及维护。

二、服务发现与注册实例

##nacos的安装请参考管网文档:Nacos 快速开始

首先声明下我依赖的springboot及springCloud版本

<!-- SpringBoot的依赖配置-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.6.11</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
<!-- SpringCloud的依赖配置-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

(一)服务提供方代码示例

添加需要依赖的jar包

        <!-- 用于服务发现与注册 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

修改application.yml文件,增加nacos注册地址配置

spring:  
  cloud:
    nacos:
      discovery:
        ##nacos的地址
        server-addr: 127.0.0.1:8848
        ##nacos的命名空间ID
        namespace: d5afac56-78a0-48e5-ac76-c6e13c96f35f
  application:
    ##应用名称,全局唯一,一个nacos中应用名不可重复
    name: service_provider

springboot启动类添加注解:@EnableDiscoveryClient,实现服务发现

/**
 * 启动程序
 * 
 * @author 大蒜是只猫
 */
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@EnableDiscoveryClient
public class ContentApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(ContentApplication.class, args);
        System.out.println("(♥◠‿◠)ノ゙  启动成功   ლ(´ڡ`ლ)゙");
    }
}

服务提供方提供的服务接口:

@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
    public String echo(@PathVariable String string) {
        return "Hello Nacos Discovery " + string;
    }

完成以上代码后,启动服务,可在nacos的服务管理--->服务列表菜单中看到该服务。

(二)服务消费方代码示例

添加依赖包

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!-- 用来做负载均衡 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        
        <!-- 提供了注解的方式调用服务,简化了http请求 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

修改application.yml文件

spring:  
  cloud:
    nacos:
      discovery:
        ##nacos的地址
        server-addr: 127.0.0.1:8848
        ##nacos的命名空间ID
        namespace: d5afac56-78a0-48e5-ac76-c6e13c96f35f
  application:
    ##应用名称,全局唯一,一个nacos中应用名不可重复
    name: consumer

消费端的服务启动类增加注解:@EnableFeignClients

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@EnableDiscoveryClient
@EnableFeignClients
public class CAApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(CAApplication.class, args);
        System.out.println("(♥◠‿◠)ノ゙  消费端启动成功   ლ(´ڡ`ლ)゙");
    }

}

 通过feign调用服务端接口

@FeignClient("service_provider")//注解填写服务名称,即可实现服务接口的负载均衡调用
@Component  //将该接口声明为spring组件,交由spring管理
public interface IContentClient {

    //该地址为服务端提供的接口地址
    @GetMapping("/content/echo/{string}")
    public String echo(@PathVariable("string")String string);
}

编写一个controller类调用上面组件的接口

@RestController
@RequestMapping("/ca")
public class CAController {


    @Autowired
    private IContentClient contentClient;

    @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
    public String echo(@PathVariable String str) {

        return contentClient.echo(str);
    }
}

启动后访问:http://localhost:8080/ca/echo/2023,即可得到服务提供方接口的返回结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值