选择的环境为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版权协议,转载请附上原文出处链接和本声明。