/*
|
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
package com.alibaba.csp.sentinel.dashboard.controller;
|
|
import java.util.Random;
|
import java.util.concurrent.TimeUnit;
|
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.http.MediaType;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
import com.alibaba.csp.sentinel.Entry;
|
import com.alibaba.csp.sentinel.EntryType;
|
import com.alibaba.csp.sentinel.SphU;
|
import com.alibaba.csp.sentinel.context.ContextUtil;
|
import com.alibaba.csp.sentinel.slots.block.BlockException;
|
|
@Controller
|
@RequestMapping(value = "/demo", produces = MediaType.APPLICATION_JSON_VALUE)
|
public class DemoController {
|
|
Logger logger = LoggerFactory.getLogger(MachineRegistryController.class);
|
|
@RequestMapping("/greeting")
|
public String greeting() {
|
return "index";
|
}
|
|
@RequestMapping("/link")
|
@ResponseBody
|
public String link() throws BlockException {
|
|
Entry entry = SphU.entry("head1", EntryType.IN);
|
|
Entry entry1 = SphU.entry("head2", EntryType.IN);
|
Entry entry2 = SphU.entry("head3", EntryType.IN);
|
Entry entry3 = SphU.entry("head4", EntryType.IN);
|
|
entry3.exit();
|
entry2.exit();
|
entry1.exit();
|
entry.exit();
|
return "successfully create a call link";
|
}
|
|
@RequestMapping("/loop")
|
@ResponseBody
|
public String loop(String name, int time) throws BlockException {
|
for (int i = 0; i < 10; i++) {
|
Thread timer = new Thread(new RunTask(name, time, false));
|
timer.setName("false");
|
timer.start();
|
}
|
return "successfully create a loop thread";
|
}
|
|
@RequestMapping("/slow")
|
@ResponseBody
|
public String slow(String name, int time) throws BlockException {
|
for (int i = 0; i < 10; i++) {
|
Thread timer = new Thread(new RunTask(name, time, true));
|
timer.setName("false");
|
timer.start();
|
}
|
return "successfully create a loop thread";
|
}
|
|
static class RunTask implements Runnable {
|
int time;
|
boolean stop = false;
|
String name;
|
boolean slow = false;
|
|
public RunTask(String name, int time, boolean slow) {
|
super();
|
this.time = time;
|
this.name = name;
|
this.slow = slow;
|
}
|
|
@Override
|
public void run() {
|
long startTime = System.currentTimeMillis();
|
ContextUtil.enter(String.valueOf(startTime));
|
while (!stop) {
|
|
long now = System.currentTimeMillis();
|
if (now - startTime > time * 1000) {
|
stop = true;
|
}
|
Entry e1 = null;
|
try {
|
e1 = SphU.entry(name);
|
|
if (slow) {
|
TimeUnit.MILLISECONDS.sleep(3000);
|
}
|
|
} catch (Exception e) {
|
} finally {
|
if (e1 != null) {
|
e1.exit();
|
}
|
}
|
Random random2 = new Random();
|
try {
|
TimeUnit.MILLISECONDS.sleep(random2.nextInt(200));
|
} catch (InterruptedException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
|
}
|
ContextUtil.exit();
|
}
|
|
}
|
|
}
|