64 lines
3.0 KiB
Markdown
64 lines
3.0 KiB
Markdown
|
# Sentinel SOFARPC Adapter
|
|||
|
|
|||
|
Sentinel SOFARPC Adapter provides service provider filter and consumer filter
|
|||
|
for [SOFARPC](https://www.sofastack.tech/projects/sofa-rpc) services.
|
|||
|
|
|||
|
**Note: This adapter supports SOFARPC 5.4.x version and above, and 5.6.x is officially recommended.**
|
|||
|
|
|||
|
To use Sentinel SOFARPC Adapter, you can simply add the following dependency to your `pom.xml`:
|
|||
|
|
|||
|
```xml
|
|||
|
<dependency>
|
|||
|
<groupId>com.alibaba.csp</groupId>
|
|||
|
<artifactId>sentinel-sofa-rpc-adapter</artifactId>
|
|||
|
<version>x.y.z</version>
|
|||
|
</dependency>
|
|||
|
```
|
|||
|
|
|||
|
The Sentinel filters are **enabled by default**. Once you add the dependency,
|
|||
|
the SOFARPC services and methods will become protected resources in Sentinel,
|
|||
|
which can leverage Sentinel's flow control and guard ability when rules are configured.
|
|||
|
Demos can be found in [sentinel-demo-sofa-rpc](https://github.com/alibaba/Sentinel/tree/master/sentinel-demo/sentinel-demo-sofa-rpc).
|
|||
|
|
|||
|
If you don't want the filters enabled, you can manually disable them. For example:
|
|||
|
|
|||
|
```java
|
|||
|
providerConfig.setParameter("sofa.rpc.sentinel.enabled", "false");
|
|||
|
consumerConfig.setParameter("sofa.rpc.sentinel.enabled", "false");
|
|||
|
```
|
|||
|
|
|||
|
or add setting in `rpc-config.json` file, and its priority is lower than above.
|
|||
|
|
|||
|
```json
|
|||
|
{
|
|||
|
"sofa.rpc.sentinel.enabled": true
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
For more details of SOFARPC filter, see [here](https://www.sofastack.tech/projects/sofa-rpc/custom-filter/).
|
|||
|
|
|||
|
## SOFARPC resources
|
|||
|
|
|||
|
The resource for SOFARPC services has two granularities: service interface and service method.
|
|||
|
|
|||
|
- Service interface:resourceName format is `interfaceName`,e.g. `com.alibaba.csp.sentinel.demo.sofa.rpc.DemoService`
|
|||
|
- Service method:resourceName format is `interfaceName#methodSignature`,e.g. `com.alibaba.csp.sentinel.demo.sofa.rpc.DemoService#sayHello(java.lang.Integer,java.lang.String,int)`
|
|||
|
|
|||
|
## Flow control based on caller
|
|||
|
|
|||
|
In many circumstances, it's also significant to control traffic flow based on the **caller**.
|
|||
|
For example, assuming that there are two services A and B, both of them initiate remote call requests to the service provider.
|
|||
|
If we want to limit the calls from service B only, we can set the `limitApp` of flow rule as the identifier of service B (e.g. service name).
|
|||
|
|
|||
|
Sentinel SOFARPC Adapter will automatically resolve the SOFARPC consumer's *application name* as the caller's name (`origin`),
|
|||
|
and will bring the caller's name when doing resource protection.
|
|||
|
If `limitApp` of flow rules is not configured (`default`), flow control will take effects on all callers.
|
|||
|
If `limitApp` of a flow rule is configured with a caller, then the corresponding flow rule will only take effect on the specific caller.
|
|||
|
|
|||
|
## Global fallback
|
|||
|
|
|||
|
Sentinel SOFARPC Adapter supports global fallback configuration.
|
|||
|
The global fallback will handle exceptions and give replacement result when blocked by
|
|||
|
flow control, degrade or system load protection. You can implement your own `SofaRpcFallback` interface
|
|||
|
and then register to `SofaRpcFallbackRegistry`. If no fallback is configured, Sentinel will wrap the `BlockException`
|
|||
|
then directly throw it out.
|