本项目采用的是nacos2.1.0,所以需要一台安装nacos2.1.0的服务器
【注意】如果你不是nacos2.1.0,请去官网找对应nacos版本的springboot/springcloud版本,避免出错
这个项目主要以Maven项目和springboot项目为核心构成
模块说明
所有子模块的父模块,是一个Maven项目(去掉src)
代码说明
pom文件
<modules>
<module>springcloud-common</module>
<module>springcloud-provider</module>
<module>springcloud-consumer</module>
</modules>
<!--springboot信息-->
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.2.2.RELEASE</version>
</parent>
<!--springcloud信息-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
该模块主要放置一些通用的代码,是一个Maven项目
代码说明
1、pom文件
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
2、user实体
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private Integer userId;
private String username;
private Integer age;
}
模块说明
该模块主要提供项目的生产功能,是一个springboot项目
代码说明
1、pom文件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>springcloud-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
2、yml文件
server:
port: 8084
# 服务的名称 服务名称-ip映射
spring:
application:
name: nacos-provider
# 注册中心的地址
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
3、启动类
4、service
package com.lx.service;
import com.lx.User;
import org.springframework.stereotype.Service;
@Service
public class UserService {
public User findById(Integer userId){
return new User(userId,"zs",20);
}
}
5、controller
package com.lx.controller;
import com.lx.User;
import com.lx.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/user")
public class UserController {
private UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
@RequestMapping("/findById/{userId}")
public User findById(@PathVariable Integer userId){
return userService.findById(userId);
}
@RequestMapping("/body")
public String getBody(@RequestBody User user){
return null;
}
// getName?userid=1&password=123
@RequestMapping("/getParams")
public String getParams(Integer userid, String password){
return null;
}
}
模块说明
该模块主要提供项目的消费功能,是一个springboot项目
代码说明
1、pom文件
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>springcloud-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2、yml文件
server:
port: 8081
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
package com.lx.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
5、controller
package com.lx.controller;
import com.alibaba.nacos.client.naming.net.HttpClient;
import com.lx.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/consumer")
public class UserController {
// 1. 发请求到http://localhost:8080/user/findById/1
// 2. 负载均衡问题: nacos-provider(n个) 获取服务(nacos-provider/ip)
/**
* 发送请求
*/
@Autowired
private RestTemplate restTemplate;
/**
* 负载均衡
*/
@Autowired
private LoadBalancerClient client;
@RequestMapping("/findById/{userId}")
public User findById(@PathVariable Integer userId){
// 根据注册到nacos上面名称,从众多的provider选择一个
ServiceInstance instance = client.choose("nacos-provider");
String url = "http://"+instance.getHost()+":"+instance.getPort()+"/user/findById/"+userId;
return restTemplate.getForObject(url, User.class);
}
}
从上面两张图可以看出,我们成功的将provider和consumer这两个服务注册到nacos上了,并且consumer成功的消费了provider的“产品”。
下面关于Spring Cloud学习系列的博客的连接有的是不能使用的,因为博主还在努力创作中,敬请期待
Spring Cloud项目(一)——集成Nacos作为注册中心
Spring Cloud项目(二)——集成Nacos作为配置中心
Spring Cloud项目(三)——实现Nacos数据信息持久化到MySQL
Spring Cloud项目(四)——使用Ribbon作为负载均衡
Spring Cloud项目(五)——使用openFeign作为服务调用
Spring Cloud项目(六)——使用sentinel作为流量管理
Spring Cloud项目(七)——使用sentinel作为限流和熔断
Spring Cloud项目(八)——使用gateway作为服务网关