Spring-Cloud-Alibaba筆記02-項目設想嘗試
對於Spring Cloud Alibaba的組件來說,也就辣麼幾個,Nacos+Dubbo+Sentinel 就差不多了。
然後,這裏試着對簡單的微服務做個設想。
首先對於設想
直接看圖吧。大概就是這個樣子 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
這裏面畫出來的,還是缺少了一些東西的,比如網關,負載啥的!!!
歡迎提提建議,推薦些好玩的組件。
嘗試
主要的核心就是Nacos+Dubbo了,Sentinel 在上一篇筆記中已經搞定了的。
還有就是項目中的Dubbo接口獨立分包,進行統一管理,多項目實現-調用。
至於裏面各個項目 admin ,api,ser1-n 只要能連上Nacos+Dubbo 就可以了,具體各個項目內使用的技術可以隨便了。
項目結構
查不多就是這個樣子,作爲一個demo試試。
其中,api和pubSer爲前筆記的demo,這裏直接複製過來作爲接口的實現與消費。
而admin項目,爲舊項目修改,接入的。
由於就的項目使用的spring boot 版本爲2.0.2 ,所有吧對應的一些版本都調低了。
具體版本的問題查看文章:https://blog.csdn.net/qq_37143673/article/details/99292705
或者官方說明的地址:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
公共接口
這個只是個定義,正的只是個接口的定義!!!
public interface UserService {
String test(String message);
......
}
接口實現
作爲實現接口的項目,使用的前筆記的項目,這裏就再貼一下,主要的代碼吧!
@Service(group = "userServer-xiaohang" ,retries = 0,timeout = 10000)
public class UserServiceImpl implements UserService {
@Override
public String test(String message) {
return "this is provider service's information:"+message;
}
.........
罒ω罒,其實就是自動生成的demo項目 。。。
Dubbo調用
使用一整套,spring cloud alibaba 的項目,只要一個註解就可以調用。
【需要加載的包,和配置請查看上一篇筆記,或者直接去生成個demo項目也有的】
@RestController
public class DubboTest {
@Reference // 就是這注解,注入遠程的服務
private UserService userService;
@RequestMapping("/getDubboTest")
public String getXhUser() {
return userService.test("Consumer's Test!!");
}
..........
舊項目admin 調整併入
新的項目的使用都沒有啥問題,但是在把舊項目併入的時候就發現了問題
Nacos 可以使用,但是Dubbo總是如法註冊,調用服務報錯空指針。
修改的內容:
pom文件的調整,
感覺裏面還是多加載了部分包,但本着能用就行了,沒有去刪減掉。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<!-- <groupId>org.springframework.cloud</groupId>-->
<artifactId>spring-cloud-starter-dubbo</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>[latest version]</version>
</dependency>
.....
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.0.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
<exclusions>
<exclusion>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
啓動調整:
Reference@EnableDubbo //新增的
@DubboComponentScan //新增的 就是這個註解沒有,導致@Reference註解無效的 我也不知道爲什麼
@SpringBootApplication
@EnableDiscoveryClient //服務發現的
@EnableCaching
public class CosonleApplication extends SpringBootServletInitializer {
。。。。。。。
配置:
項目使用的yml配置的
新增的內容:
spring:
cloud:
nacos:
discovery:
server-addr: http://192.168.1.180:8848
sentinel:
transport:
port: 8992
dashboard: 10.0.100.208:8080 # 控制檯地址
eager: true
dubbo:
application:
name: happyPay-sentinel-xiaohang-cloud-test
registry:
address: nacos://192.168.1.180:8848
protocol:
name: dubbo
port: -1
代碼測試:
@Service
public class dubboService {
@Reference(group = "userServer-xiaohang") //默認不指定group的,沒有關係
private UserService userService;
public void dubbotest(){
System.out.println("小杭測試 springcloud dubbo 的使用!!!!!");
System.out.println(userService.test("Consumer's Test!!"));
。。。。。。。。
此服務也可以在正常的控制層注入
@Autowired
com.ibeetl.cms.service.dubboService dubboService;
小結
試一下就可了的。
嘗試Nacos+Dubbo+Sentinel是可以的。這樣就可以簡單的吧一堆的舊項目搞一起了。
至於更多的整合,就需要在業務上進行拆分了,至少簡單併入,依照以上是沒問題的。
還有各種的組件,比如MQ,MyCAT,Redis等等等 項目夠大采用的到
小公司的項目,需要嗎 ╮(╯_╰)╭
圖片中的其他業務拆分,是個人對常用項目的理解上拆分的。看看就好,無需糾結。
2020-05-29 小杭