二、实现方式
我在spring Cloud项目中,使用了两种方式处理降级操作。
(1)使用feign组件完成降级操作,到内容提供者无法提供服务时, 消费者会调用降级操作,返回服务不可用等信息,或者返回提前准备好的静态页面。 调用的降级处理方法如下:
1@Component
2public class FeignClientFallbackFactory implements FallbackFactory<SchedualServiceHi> {
3 // 打印日志
4 private static final Logger print = LoggerFactory.getLogger(FeignClientFallbackFactory.class)
5 //降级处理方式
6 @Override
7 public SchedualServiceHi create(Throwable throwable) {
8 return new SchedualServiceHi() {
9 @Override
10 public String mm(@RequestParam("uname") String uname, @RequestParam("upwd") String upwd) {
11 print.info("fallbackreason was:", throwable)
12 return "服务报错了"
13 }
14 }
15 }
16}
(2)也可以使用zuul网关,在spring Cloud自定义一个类实现ZuulFallbackProvider接口,当出现问题,无法正常调用时 ,为服务提供回退响应。
1@Component
2public class MyfaultFallback implements FallbackProvider {
3 @Override
4 public String getRoute() {
5// 表示为哪个服务提供回退,此处表示所有微服务。
6 return "*"
7 }
8
9 @Override
10 public ClientHttpResponse fallbackResponse(String route, Throwable cause) {11 return new ClientHttpResponse() {
12 @Override
13 public HttpStatus getStatusCode() throws IOException {
14// fallback返回的状态码
15 return HttpStatus.OK
16 }
17
18 @Override
19 public int getRawStatusCode() throws IOException {
20 //数字类型的状态码,本例返回的是200
21 return this.getStatusCode().value()
22 }
23
24 @Override
25 public String getStatusText() throws IOException {
26 //状态文本27 return "OK"
28 }
29
30 @Override
31 public void close() {
32
33 }
34
35 @Override
36 public InputStream getBody() throws IOException {
37// 响应体38 return new ByteArrayInputStream("用户微服务不可用,请稍候再试".getBytes())
39 }
40
41 @Override
42 public HttpHeaders getHeaders() {
43 HttpHeaders headers = new HttpHeaders()
44 headers.setContentType(MediaType.APPLICATION_JSON)
45 MediaType mt = new MediaType("application",
46 "json", Charset.forName("UTF-8"))
47 headers.setContentType(mt)
48 return headers
49 }
50 }
51 }
52}
三、效果展示
当我们访问zuul网关时,服务提供者没有开启,访问不到,就会进行降级处理,显示下面内容。
原文链接:https://zhuanlan.zhihu.com/p/69635613
代码应该是$taskset-c-p。linux服务器怎么降低内核cpu进程,获知Linux的进程运行在哪个CPU内核上的当你在多核NUMA处理器上运行需要较高性能的HPC(高性能计算)程序或非常消耗网络资源的程序时。
CPU/memory的亲和力是限度其发挥最大性能的重要因素之一。
在同一NUMA节点上调度最相关的进程可以减少缓慢的远程内存访问。
像英特尔SandyBridge处理器,该处理器有一个集成的PCIe控制器,你可以在同一NUMA节点上调度网络I/O负载(如网卡)来突破PCI到CPU亲和力限制。
作为性能优化和故障排除的一部分,你可能想知道特定的进程被调度到哪个CPU内核(或NUMA节点)上运行。
这里有几种方法可以找出哪个CPU内核被调度来运行给定的Linux进程或线程。
方法一如果一个进程使用taskset命令明确的被固定(pinned)到CPU的特定内核上,你可以使用taskset命令找出被固定的CPU内核。
复制代码代码如下:$taskset-c-p。
例如,如果你对PID5357这个进程有兴趣:复制代码代码如下:taskset-c-p5357。
pid5357'scurrentaffinitylist:5输出显示这个过程被固定在CPU内核5上。
但是,如果你没有明确固定进程到任何CPU内核,你会得到类似下面的亲和力列表。
pid5357'scurrentaffinitylist:0-11输出表明该进程可能会被安排在从0到11中的任何一个CPU内核。
在这种情况下,taskset不能识别该进程当前被分配给哪个CPU内核,你应该使用如下所述的方法。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)