Files
SOP/doc/docs/files/10011_项目接入到SOP.md
六如 5dd9c597a9 Merge branch 'master' into 5.0
# Conflicts:
#	doc/docs/files/10011_项目接入到SOP.md
#	pom.xml
#	sop-common/sop-bridge-nacos/pom.xml
#	sop-common/sop-service-common/pom.xml
2024-09-04 09:58:05 +08:00

218 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 项目接入到SOP
以springboot项目为例完整项目可参考sop-example下的sop-story
- pom.xml添加版本配置
```xml
<!-- springboot 版本-->
<spring-boot.version>2.6.15</spring-boot.version>
<!-- spring cloud 版本 -->
<spring-cloud.version>2021.0.5</spring-cloud.version>
<!-- spring cloud alibaba 版本 -->
<!-- 具体版本对应关系见https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E -->
<spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
```
- pom.xml添加`<dependencyManagement>`控制版本
```xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
```
- pom.xml依赖sop-service-common和nacos服务发现
```xml
<dependency>
<groupId>com.gitee.sop</groupId>
<artifactId>sop-service-common</artifactId>
<version>最新版本</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
```
- application.properties配置文件添加
```properties
server.port=2222
spring.application.name=story-service
# nacos注册中心
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
```
- 在springboot启动类上添加`@EnableDiscoveryClient`
- 新增一个配置类,继承`AlipayServiceConfiguration.java`,内容为空
```java
@Configuration
public class OpenServiceConfig extends AlipayServiceConfiguration {
}
```
- 全局异常处理
在微服务项目的全局异常处理中添加一句:`ExceptionHolder.hold(request, response, exception);`
```java
@ExceptionHandler(Exception.class)
@ResponseBody
public Object exceptionHandler(HttpServletRequest request, HttpServletResponse response, Exception exception) {
...
// 在返回前加这一句
ExceptionHolder.hold(request, response, exception);
...
return ..;
}
```
如果没有配置全局异常,可参考下面配置
```java
@ControllerAdvice
@Slf4j
public class StoryGlobalExceptionHandler {
/**
* 捕获手动抛出的异常
*
* @param request request
* @param response response
* @param exception 异常信息
* @return 返回提示信息
*/
@ExceptionHandler(Exception.class)
@ResponseBody
public Object exceptionHandler(HttpServletRequest request, HttpServletResponse response, Exception exception) {
// 在返回前加这一句
ExceptionHolder.hold(request, response, exception);
// 下面可以实现自己的全局异常处理
return new ErrorResult(500, exception.getMessage());
}
@Data
@AllArgsConstructor
public static class ErrorResult {
private int code;
private String msg;
}
}
```
到此准备工作就完成了,接下来可前往`新增接口`查看如何新增接口。
## 非Java项目接入
如果是非Java项目接入如php需要做到以下几点
> 1. 提供路由配置接口
> 2. 服务注册到nacos并在nacos的metadata中指定接口路径metadata的key为`sop.routes.path`
- 提供路由配置接口
php应用提供的接口需要返回如下json内容
假设请求的接口为:`http://open.xxx.com/get_routes`
```json
{
"serviceId": "goods-service",
"createTime": 1568603471646,
"updateTime": 1568603471646,
"description": null,
"routeDefinitionList": [
{
"id": "goods.list1.0",
"name": "goods.list",
"version": "1.0",
"uri": "lb://goods-service",
"path": "/goods/list_goods",
"order": 0,
"ignoreValidate": 0,
"status": 1,
"mergeResult": 1,
"permission": 0
},
...
]
}
```
json参数说明
|参数名|是否必填|说明|
|:----|:----|:----|
|serviceId |是|serviceId服务id |
|createTime |是|创建时间Unix timestamp毫秒 |
|updateTime |是|修改时间Unix timestamp毫秒 |
|description|否|描述|
|routeDefinitionList元素参数说明|是|路由配置routeDefinitionList元素参数说明|
routeDefinitionList元素参数说明
|参数名|是否必填|说明|
|:----|:----|:----|
|id |是|路由id全局唯一格式接口名+版本号 |
|name|是|接口名称|
|version|是|版本号|
|uri|是|格式lb:// + serviceIdlb://goods-service|
|path|是|接口path填端口号后面的path如你的接口为`http://open.domain.com:8080/goods/list_goods`,填:`/goods/list_goods`|
|order|是|固定填0|
|ignoreValidate|是|忽略签名验证10否|
|status|是|启用状态1启用2禁用|
|mergeResult|是|是否统一返回结果10否|
|permission|是|是否需要权限访问10否|
- 服务注册到nacos
可前往nacos官网参考[open-api](https://nacos.io/zh-cn/docs/open-api.html)使用nacos提供的接口完成服务注册
- 在nacos的metadata中指定接口路径
伪代码如下:
```java
Instance instance = new Instance();
instance.setServiceName("goods-service");
instance.setIp("192.168.0.11");
instance.setPort(8080);
// 在nacos的metadata中指定接口路径
instance.getMetadata().put("sop.routes.path", "http://open.xxx.com/get_routes");
namingService.registerInstance(serviceId, instance);
```
完成以上步骤后php服务注册到nacos网关会触发监听事件获取新注册的服务然后会向你的服务拉取路由配置。