架构学习资料
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
<type>pom</type>
<scope>import</scope>
</dependency>
<!--整合springcloud alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.5.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
### 生产者模块
![在这里插入图片描述](https://img-blog.csdnimg.cn/4cdd5dd09bde409f957e62e4c7d65485.png)
### 单个配置的情况
![在这里插入图片描述](https://img-blog.csdnimg.cn/eacc447e4d174d3092dd903b9f34115c.png)
spring:
cloud:
nacos:
discovery:
# 能够注册
register-enabled: true
server-addr: http://192.168.111.130:8848/
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
# namespace的id
namespace: 57bca93f-1161-4649-aec3-da79c3aa7cc2
# 配置单个
group: DEV
name: book-cofig
file-extension: yaml
application:
name: springCloud-provider
### 多个配置的情况
![在这里插入图片描述](https://img-blog.csdnimg.cn/08eb0ea8e3cb42059c7e340fce85972a.png)
#### 没加.yaml的报错【报错】
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘providerController’: Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder ‘book.name’ in value “${book.name}”
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder ‘book.name’ in value “${book.name}”
![在这里插入图片描述](https://img-blog.csdnimg.cn/0d80ab3633dd4932ab39f60664606e23.png)
#### 两个同名配置【细节】
![在这里插入图片描述](https://img-blog.csdnimg.cn/99aea485f927454e9edf69a2843c8e38.png)
### 完整代码
![在这里插入图片描述](https://img-blog.csdnimg.cn/3b75e11057b84cb5ae253aa12cdfa4cd.png)
#### config配置
>
> bootstrap.yml
>
>
>
spring:
cloud:
nacos:
discovery:
# 能够注册
register-enabled: true
server-addr: http://192.168.111.130:8848/
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
# namespace的id
namespace: 57bca93f-1161-4649-aec3-da79c3aa7cc2
# 配置单个
group: DEV
name: book-cofig
file-extension: yaml
# 配置多个 TODO:配置多个的时候,要加上.yaml后缀,nacos中的命名也要加.yaml
# TODO:如果两个配置里面的值相同,则后面加载进来的会覆盖前面的;
extension-configs:
- data-id: book-cofig
group: DEV
refresh: true
- data-id: book-config1.yaml
group: DEV
refresh: true
- data-id: book-config2.yaml
group: DEV
refresh: true
application:
name: springCloud-provider
>
> application.yml
>
>
>
server:
port: 9099
#### 主启动类
package com.tianju.cloud.provider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApp {
public static void main(String[] args) {
SpringApplication.run(ProviderApp.class, args);
}
}
#### controller层
package com.tianju.cloud.provider.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(“/api/provider”)
public class ProviderController {
@Value(“${book.name}”)
private String movieName;
@Value("${spring.application.name}")
private String serverId;
@Value("${server.port}")
private int port;
@GetMapping("/hello")
public String hello(){
String s = "服务"+serverId+",端口:"+port+",电影名:"+movieName;
System.out.println(s);
return s;
}
}
### 消费者模块
![在这里插入图片描述](https://img-blog.csdnimg.cn/96fbb379cf2845bd9c31fe862dc223f2.png)
#### 进行配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/cb5bc6ac4ebb468faa219a842d978859.png)
spring:
cloud:
nacos:
discovery:
# 能够注册
register-enabled: true
server-addr: http://192.168.111.130:8848/
application:
name: springCloud-consumer
#### restTemplate配置类
package com.tianju.consumer.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean(name = “restTemplateA”) // 定义名称
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/443ecf8184994bf4bf9b45d87cb988c1.png)
#### controller层
package com.tianju.consumer.controller;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@RestController
@RequestMapping(“/api/consumer”)
public class ConsumerController {
@Resource // 根据名称注入
private RestTemplate restTemplateA;
@GetMapping("/nihao")
public String nihao(){
String url = "http://localhost:9099/api/provider/hello";
ResponseEntity<String> forEntity = restTemplateA
.getForEntity(
url,
String.class
);
String body = forEntity.getBody();
System.out.println("消费者获取生产者提供的数据"+body);
return body;
}
}
## 使用nacos的服务名【报错】
![在这里插入图片描述](https://img-blog.csdnimg.cn/eb3975f53b3e4ecaa9118fee833054bc.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/e41449271aa7479b83b0e51ad4900ba8.png)
### 添加Ribbon负载均衡
<!--客户端负载均衡loadbalancer-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
![在这里插入图片描述](https://img-blog.csdnimg.cn/cc44d7ac1d18488696006a06eebaad88.png)
### 改造config
package com.tianju.consumer.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean(name = “restTemplateA”) // 定义名称
public RestTemplate restTemplate(){
return new RestTemplate();
}
@LoadBalanced // 具有软件负载均衡能力
@Bean(name = "restTemplateWith") // 定义名称
public RestTemplate restTemplateWith(){
return new RestTemplate();
}
}
### controller调用
package com.tianju.consumer.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
最后
rk.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
最后
[外链图片转存中…(img-Tfx0n25K-1715469595449)]
[外链图片转存中…(img-dYBy42TF-1715469595450)]