[Soul 源碼之旅]1.1 Soul基礎(chǔ)環(huán)境搭建&Dubbo&SpringBoot集成

1.1 下載源碼

我們可以在下面鏈接下載Soul源碼 鏈接,下載完成后通過(guò)以下命令進(jìn)行編譯。

mvn clean package install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true

1.1.1 Soul-admin

soul-admin soul控制臺(tái)勿侯,主要負(fù)載soul的元數(shù)據(jù)管理拓瞪,它是集成了一個(gè)前端管理控制臺(tái),可以配置插件助琐,限流荞膘,防火墻等功能疟暖。

server:
  port: 9095
  address: 0.0.0.0

spring:
  thymeleaf:
    cache: true
    encoding: utf-8
    enabled: true
    prefix: classpath:/static/
    suffix: .html
  datasource:
    url: jdbc:mysql://localhost:3306/soul?useUnicode=true&characterEncoding=utf-8
    username: root
    password:
    driver-class-name: com.mysql.jdbc.Driver

mybatis:
  config-location: classpath:/mybatis/mybatis-config.xml
  mapper-locations: classpath:/mappers/*.xml


soul:
  sync:
    websocket:
        enabled : true

如上卡辰,我們只需要將我們的Mysql數(shù)據(jù)庫(kù)配上去钠右,然后啟動(dòng),Soul會(huì)自動(dòng)為我們創(chuàng)建數(shù)據(jù)庫(kù)和對(duì)應(yīng)的表掘譬。

Database changed
mysql> show tables
    -> ;
+--------------------+
| Tables_in_soul     |
+--------------------+
| app_auth           |
| auth_param         |
| auth_path          |
| dashboard_user     |
| meta_data          |
| plugin             |
| plugin_handle      |
| rule               |
| rule_condition     |
| selector           |
| selector_condition |
| soul_dict          |
+--------------------+
12 rows in set (0.01 sec)

然后我們?cè)L問(wèn)這個(gè)鏈接就可以進(jìn)行訪問(wèn)了 http://localhost:9095/ 用戶名和密碼是admin/123456泰演。

image.png

1.1.2 soul-bootstrap

soul-bootstrap 根據(jù)soul-admin的配置負(fù)責(zé)將請(qǐng)求轉(zhuǎn)發(fā)的后面的服務(wù)
配置文件:

# 這里配置soul-bootstrap 與 soul-admin的交互的方式,我們先使用最簡(jiǎn)單的websocket葱轩,這里配置上soul-admin的地址
soul :
    file:
      enabled: true
    corss:
      enabled: true
    dubbo :
      parameter: multi
    sync:
        websocket :
             urls: ws://localhost:9095/websocket

soul-bootstrap 的地址是 http://127.0.0.1:9195 訪問(wèn)結(jié)果如圖


image.png

soul-admin 目前還沒有任何信息睦焕,soul-bootstrap 可以集成dubbo SpringCloud SpringBoot等模塊,我們接來(lái)一個(gè)個(gè)使用靴拱。

1.1.3 soul-test-dubbo

首先我們需要在插件管理開啟Dubbo插件


image.png

然后我們?cè)?spring-dubbo.xml 這個(gè)文件配置上zookeeper 就可以啟動(dòng)了

<dubbo:registry address="zookeeper://localhost:2181"/>

我們?cè)倏匆幌略獢?shù)據(jù)管理就可以看到注冊(cè)上soul-admin 的內(nèi)容了


image.png

dubbo中暴露的接口信息如下

@Service("dubboTestService")
public class DubboTestServiceImpl implements DubboTestService {
    
    @Override
    @SoulDubboClient(path = "/findById", desc = "根據(jù)用戶查詢")
    public DubboTest findById(final String id) {
        DubboTest dubboTest = new DubboTest();
        dubboTest.setId(id);
        dubboTest.setName("hello world Soul Alibaba Dubbo, findById");
        return dubboTest;
    }
    
    @Override
    @SoulDubboClient(path = "/findAll", desc = "獲取所有")
    public DubboTest findAll() {
        DubboTest dubboTest = new DubboTest();
        dubboTest.setName("hello world Soul Alibaba Dubbo , findAll");
        dubboTest.setId(String.valueOf(new Random().nextInt()));
        return dubboTest;
    }
    
    @Override
    @SoulDubboClient(path = "/insert", desc = "插入一條數(shù)據(jù)")
    public DubboTest insert(final DubboTest dubboTest) {
        dubboTest.setName("hello world Soul Alibaba Dubbo: " + dubboTest.getName());
        return dubboTest;
    }
}

我們需要重啟一下 soul-admin 和 soul-bootstrap 然后就可以訪問(wèn)了垃喊。


image.png

壓測(cè)得到以下數(shù)據(jù)

 mac@AndydeMacBook-Pro  ~  wrk -t 4 -c 20 http://localhost:9195/dubbo/findAll
Running 10s test @ http://localhost:9195/dubbo/findAll
  4 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     3.26ms    2.80ms  48.48ms   94.34%
    Req/Sec     1.71k   257.03     2.16k    78.00%
  68000 requests in 10.01s, 12.13MB read
Requests/sec:   6789.82
Transfer/sec:      1.21MB

1.1.3 soul-test-http 測(cè)試SpringBoot 項(xiàng)目

soul 配置如下,設(shè)置contextPath 和 admin 的地址

soul:
  http:
    adminUrl: http://localhost:9095
    port: 8188
    contextPath: /http
    appName: http
    full: false

主要接口如下:只需要配置 @SoulSpringMvcClient 這個(gè)注解即可使用

@RestController
@RequestMapping("/test")
@SoulSpringMvcClient(path = "/test/**")
public class HttpTestController {
    @PostMapping("/payment")
    public UserDTO post(@RequestBody final UserDTO userDTO) {
        return userDTO;
    }
    @GetMapping("/findByUserId")
    public UserDTO findByUserId(@RequestParam("userId") final String userId) {
        UserDTO userDTO = new UserDTO();
        userDTO.setUserId(userId);
        userDTO.setUserName("hello world");
        return userDTO;
    }

    @GetMapping("/path/{id}")
    public UserDTO getPathVariable(@PathVariable("id") final String id, @RequestParam("name") final String name) {
        UserDTO userDTO = new UserDTO();
        userDTO.setUserId(id);
        userDTO.setUserName("hello world");
        return userDTO;
    }
    @GetMapping("/path/{id}/name")
    public UserDTO testRestFul(@PathVariable("id") final String id) {
        UserDTO userDTO = new UserDTO();
        userDTO.setUserId(id);
        userDTO.setUserName("hello world");
        return userDTO;
    }
    @PutMapping("/putPathBody/{id}")
    public UserDTO putPathVariableAndBody(@PathVariable("id") final String id, @RequestBody final UserDTO userDTO) {
        userDTO.setUserId(id);
        userDTO.setUserName("hello world");
        return userDTO;
    }

}

開啟Divide 插件


image.png

如圖已經(jīng)能查看到元數(shù)據(jù)信息


image.png

訪問(wèn)情況
image.png

壓測(cè)情況

 mac@AndydeMacBook-Pro  ~  wrk -t 4 -c 20 http://localhost:9195/http/test/findByUserId\?userId\=1
Running 10s test @ http://localhost:9195/http/test/findByUserId?userId=1
  4 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    11.85ms   14.74ms 126.42ms   86.84%
    Req/Sec   667.48    163.61     1.22k    72.25%
  26616 requests in 10.02s, 2.79MB read
Requests/sec:   2656.05
Transfer/sec:    285.34KB
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末袜炕,一起剝皮案震驚了整個(gè)濱河市本谜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偎窘,老刑警劉巖乌助,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溜在,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡他托,警方通過(guò)查閱死者的電腦和手機(jī)炕泳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)上祈,“玉大人,你說(shuō)我怎么就攤上這事浙芙〉谴蹋” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵嗡呼,是天一觀的道長(zhǎng)纸俭。 經(jīng)常有香客問(wèn)我,道長(zhǎng)南窗,這世上最難降的妖魔是什么揍很? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮万伤,結(jié)果婚禮上窒悔,老公的妹妹穿的比我還像新娘。我一直安慰自己敌买,他們只是感情好简珠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虹钮,像睡著了一般聋庵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芙粱,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天祭玉,我揣著相機(jī)與錄音,去河邊找鬼春畔。 笑死脱货,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拐迁。 我是一名探鬼主播蹭劈,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼线召!你這毒婦竟也來(lái)了铺韧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缓淹,失蹤者是張志新(化名)和其女友劉穎哈打,沒想到半個(gè)月后塔逃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡料仗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年湾盗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片立轧。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡格粪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氛改,到底是詐尸還是另有隱情帐萎,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布胜卤,位于F島的核電站疆导,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏葛躏。R本人自食惡果不足惜澈段,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舰攒。 院中可真熱鬧败富,春花似錦、人聲如沸摩窃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)偶芍。三九已至充择,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匪蟀,已是汗流浹背椎麦。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留材彪,地道東北人观挎。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像段化,于是被迫代替她去往敵國(guó)和親嘁捷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容