Nacos注册中心如何配置

选择的环境为springcloudAlibaba一套体系,选择的注册中心为Nacos

官网链接:https://nacos.io/en-us/【阿里开源的注册中心】

1.启动Nacos注册中心

 

Linux或是Mac系统下启动Nacos:sh startup.sh -m standalone

Windows系统下启动Nacos:startup.cmd -m standalone

默认访问端口为:http://localhost:8848/nacos/

当然自己也可以进行路径的更改,在配置文件【application.properties】里

2.添加依赖,在提供者的pom文件里

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

3.bootstrap.yml的配置信息【注意yml格式】

server:
  port: 8081
spring:
  application:
    name: sca-provider
  cloud:
    nacos:
      discovery:  #服务注册
        server-addr: localhost:8848
      config:     #服务配置
        server-addr: localhost:8848
        group: DEFAULT_GROUP  #分组
        file-extension: yml   #文件格式

4.注册中心Nacos的配置设置:

5.配置的内容,都存储在数据库里:

6.提供者的控制类:

 

package com.cy;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.logging.LogLevel;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class ScaProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ScaProviderApplication.class,args);
    }
    //读取application.yml中的server.port
    @Value("${server.port}")
    private String server;

    @RefreshScope   //动态属性配置
    @RestController
    public class ProviderController{
        //获取配置中心的配置信息
        @Value("${logging.level.com.cy:error}")
        private String logLevel;
        @GetMapping("/provider/doGetLogLevel")
        public String doGetLogLevel(){
            return "log level is" + logLevel;
        }
        @GetMapping("/provider/echo/{msg}")
        public String doEcho(@PathVariable String msg){
            return server+" say hello "+msg;
        }
    }
}

 

7.消费者的控制类:

package com.cy;
import com.alibaba.cloud.nacos.ribbon.NacosRule;
import com.netflix.loadbalancer.IRule;
import com.netflix.ribbon.proxy.annotation.Http;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

/*当我们的主启动类使用@EnableFeignClients注解描述时,spring工程
在启动时会扫描@FeignClients注解描述的接口,并基于接口
创建其实现类(代理类)
* */
@EnableFeignClients
@SpringBootApplication

public class ScaConsumerApplication {
    //创建日志对象
    //创建日志对象
    //springboot内部默认logback
    private static Logger log =  LoggerFactory.getLogger(ScaConsumerApplication.class);
    public static void main(String[] args) {
        SpringApplication.run(ScaConsumerApplication.class,args);
        //System.out.println("==System.out==");
       // System.out.println("==System.out==");
        log.debug("==debug==");//debug<info<warn<error
        log.info("==info==");
        log.warn("==warn==");
        log.error("==error==");
    }

    /*springcloud 工程中可以使用此对象调用第三方服务*/
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    /*新增 默认负载均衡03*/
    @Autowired//按照属性去查找,然后,再按照名字查找
    private RestTemplate loadBalancedRestTemplate;

    @Bean
    @LoadBalanced
    public RestTemplate loadBalancedRestTemplate(){
        return new RestTemplate();
    }
    /*新增 默认负载均衡03*/
    @RestController
    public class ConsumerController{

        @Value("${spring.application.name:aaa}")
        private String consumerName;
        @Autowired
        private RestTemplate restTemplate;//远程调用
        //http://localhost:8090/consumer/doRestEcho01
        @GetMapping("/consumer/doRestEcho01")
        public String doRestEcho(){
           //日志的设置
            log.debug("/consumer/doRestEcho01  {}","doRestEcho01");
            //定义服务提供方的地址
            String url="http://localhost:8081/provider/echo/"+consumerName;
            //调用服务提供方(sca-provider)
            //响应之间的关系没有跨域,或是转发,重定向
            return restTemplate.getForObject(url,String.class);
        }
        // LoadBalancerClient 此对象底层基于Ribbon实现负载均衡
        // LoadBalancerClient 对象在服务启动时底层已经帮我们创建好了
        @Autowired
        private LoadBalancerClient loadBalancerClient;
        @GetMapping("/consumer/doRestEcho02")
        public String doRestEcho02(){
            //基于服务采用一定的负载均衡算法获取服务实例
            ServiceInstance choose =
            loadBalancerClient.choose("sca-provider");
            String ip=choose.getHost();
            int port=choose.getPort();
            //定义服务提供方的地址
            //String url="http://"+ip+":"+port+"/provider/echo/"+consumerName;
           //假如不希望使用字符串拼接,可以使用如下方式(其中%s为占位符,传值时,一定要注意顺序)
            String url=String.format("http://%s:%s/provider/echo/%s",ip,port,consumerName);
            //调用服务提供方(sca-provider)
            //响应之间的关系没有跨域,或是转发,重定向
            return restTemplate.getForObject(url,String.class);
        }
        /*@Bean注解由spring提供,通常用于描述方法,用于告诉spring框架
        此方法的返回值要交给spring管理,类似@Controller、@Service、@Compont
        这些注解一般描述的是类
        * */

        @GetMapping("/consumer/doRestEcho03")
        public String doRestEcho03(){
            String url=String.format("http://%s/provider/echo/%s","sca-provider",consumerName);
            //调用服务提供方(sca-provider)
            return loadBalancedRestTemplate.getForObject(url,String.class);
        }
    }
}

8.访问路径:

http://localhost:8081/provider/doGetLogLevel

【下面是突显信息】

 


版权声明:本文为weixin_56859779原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。