微服务 1-nacos注册中心

1 什么是注册中心

注册中心在微服务项目中扮演着非常重要的角色,是微服务架构中的纽带,类似于通讯录,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。

2 为什么要使用注册中心

注册中心解决了服务发现的问题。在没有注册中心时候,服务间调用需要知道被调方的地址或者代理地址。当服务更换部署地址,就不得不修改调用当中指定的地址或者修改代理配置。而有了注册中心之后,每个服务在调用别人的时候只需要知道服务名称就好,继续地址都会通过注册中心同步过来。

在这里插入图片描述

3 实战

3.1 下载部署

可以从https://github.com/alibaba/nacos/releases下载nacos-server-$version.zip包。解压将conf里面nacos-mysql.sql 脚本导入数据库,并在同目录下的application.properties 中添加自己的数据库信息。然后直接点击bin/startup.cmd -m standalone就可以了。

1)
在这里插入图片描述

2)在application.properties中添加自己的数据库

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://xxxx:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=xxxx

启动服务:

sh startup.sh -m standalone

nacos控制台

初始账号密码都是nacos

http://ip:8848/nacos/index.html

如果是腾讯云等云产品需要开放8848端口,nacos建议在内网使用,所以我们需要限制8848端口访问的ip。

这个ip如果设置为ipconfig的ip可能不会生效,要设置为以下访问日志中nacos所能识别的ip。

在这里插入图片描述
在这里插入图片描述

8848需要开放日志中的地址和真实客户端地址,nacos2.x还需要开放端口9848和9849客户端真实地址(nacos和服务部署在同一服务器也需要放开本服务器公网ip)。

在这里插入图片描述

腾讯云安全组配置
在这里插入图片描述

3.2 引入依赖

  <!-- SpringCloud Alibaba 微服务 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2021.0.1.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <!-- Alibaba Nacos 配置 使用nacos2.0 版本需要引入新版本的 client依赖-->
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.0.4</version>
        </dependency>

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

        <!-- springcloud loadbalancer 负载均衡 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>

        <!-- SpringBoot Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


    </dependencies>
	

2 配置yaml

bootstrap.yml:

spring:
  application:
    # 应用名称 默认的服务注册名
    name: mycloud-nacos
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: x.x.x.x:8848

3 启动类

@SpringBootApplication
public class MyCloudNacosApplication {

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

    @Bean
    //负载均衡,一定要配置不然无法远程调用
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

@EnableDiscoveryClient 注解,开启 Spring Cloud 的注册发现功能。不过从 Spring Cloud Edgware 版本开始,实际上已经不需要添加 @EnableDiscoveryClient 注解,只需要引入 Spring Cloud 注册发现组件,就会自动开启注册发现的功能。例如说,我们这里已经引入了spring-cloud-starter-alibaba-nacos-discovery 依赖,就不用再添加
@EnableDiscoveryClient 注解了。

后续用到的mycloud-order 服务采用同样的配置就不展示了

4 启动服务

在nacos我们可以看到服务已注册

在这里插入图片描述

5 controller测试

@RestController
@RequestMapping("/nacos")
@RefreshScope
@Slf4j
public class TestController {

	@Resource
    private RestTemplate restTemplate;

  @RequestMapping("/test")
    public void test(){
        log.info("-------nacos------");
        //根据mycloud-order 服务名调用
        final String str = restTemplate.getForObject("http://mycloud-order/order/test", String.class);
        log.info("---------收到的返回值str:{}",str);

    }

mycloud-order controller 类:

@RestController
@RequestMapping("/order")
@Slf4j
public class TestController {

    @RequestMapping("test")
    public String test(){
        log.info("-------order------");
        return "----来了老弟---";
    }
}

调用mycloud-nacos 方法结果:

在这里插入图片描述

6 总结

通过向nacos上注册服务,进行服务调用时就可通过 http://服务名/rest路径 进行调用了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值