Spring-Cloud-Alibaba筆記01-關於遠程調用Dubbo

Spring-Cloud-Alibaba筆記01-關於遠程調用Dubbo

Nacos既然連上了,當然是用試試遠程調用的東東了!!!

使用Nacos本身的服務調用

好像也挺好用的,參數方法直接調用就可以了,用於訪問遠程Rest接口的。

推薦參考文章:https://www.jianshu.com/p/27a82c494413

這個比較簡單,就是發個請求,URL地址使用服務名。

// ======================  啓動類 ================================================
@EnableDiscoveryClient  // 服務發現
@SpringBootApplication
public class DemoApplication {

    //  這裏這小段 就是需要的加上的東東了
	@LoadBalanced
	@Bean
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}
 // ====================== 控制測試類 ============================================
	private final RestTemplate restTemplate;

	@Autowired
	public SampleController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}

    // 提供的服務
	@RestController
	class EchoController {
		@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
		public String echo(@PathVariable String string) {
			return "Hello ,this is xiaohang-demo information : (#^.^#) Nacos Discovery " + string + "Hello " + userName + " " + age + "!";
		}
	}

    // 遠程調用rest接口,使用服務名稱。nacos會自行路由等。
	@RequestMapping("/getXhUser")
	public String getXhUser() {
		return restTemplate.getForObject("http://xh-demo/echo/" + "xiaohangTest", String.class);
	}
}

RestTemplate 就是個發送http請求的工具,而這裏的不同用處,就是使用的URL並不是具體地址,而是nacos的服務名稱。而已,就這樣了 。。。。。


Dubbo

簡單說就是,遠程服務調用的。非Rest接口調用。

參考文章:https://segmentfault.com/a/1190000019896723 【超級詳細的】

節點角色說明

節點 角色說明
Provider 暴露服務的服務提供方
Consumer 調用遠程服務的服務消費方
Registry 服務註冊與發現的註冊中心
Monitor 統計服務的調用次數和調用時間的監控中心
Container 服務運行容器

整體步驟

使用的步驟還是很簡單的,管它的實現細節複雜呢。

  • 部署啓動Nacos服務;【上一篇有文檔,很簡單】
  • 啓動容器,加載,運行服務提供者
  • 服務提供者在啓動時,在註冊中心發佈註冊自己提供的服務
  • 服務消費者在啓動時,在註冊中心訂閱自己所需的服務
  • 服務消費者把服務當做本地調用就可以了。dubbo會自動注入。

具體操作Demo

服務端-Provider
配置:
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-dubbo</artifactId>
		</dependency>
######################## dubbo config : ########################
# 微服務治理控制檯(Dubbo): https://edas.console.aliyun.com/#/dubboManage/SPServiceSearchConfig
# dubbo 服務掃描基礎包路徑
dubbo.scan.base-packages= com.example.demo.dubbo.provider    
# Dubbo 服務暴露的協議配置,其中子屬性 name 爲協議名稱,port 爲協議端口( -1 表示自增端口,從 20880 開始)
dubbo.protocol.name= dubbo
dubbo.protocol.port= -1
# 掛載到 Spring Cloud 註冊中心
dubbo.registry.address= nacos://192.168.1.180:8848
# 用於服務消費方訂閱服務提供方的應用名稱的列表,若需訂閱多應用,使用 "," 分割。 不推薦使用默認值爲 "*",它將訂閱所有應用。
# 這裏默認使用了當前應用名,請根據需要增加對應的應用名
#dubbo.cloud.subscribed-services= ${provider.application.name}
dubbo.cloud.subscribed-services= *
定義接口

這個接口的定義,在消費的時候也會用到,所有我估計着項目使用的話,這一部分需要作爲公共包引入,或者使用自己的meaven倉庫才行。

public interface UserService {
    String test(String message);
}
接口實現
package com.example.demo.dubbo.provider;
// 這個@Service 就是dubbo會掃描並註冊發佈的服務註解了 !!!!!
@Service
public class UserServiceImpl implements UserService {
    @Override
    public String test(String message) {
        return "this is provider service's information:"+message;
    }
}

然後? 就沒有了 。。。。。

消費方-Consumer
配置:

跟服務端一樣的,略過。只是消費的話可以不配置掃描包路徑的。

引入服務接口包:重點

這個就是我之前一直想不通,爲什麼消費項目上可以使用提供方的service類進行注入了。

把前一個項目Provider,點一下maven的install。然後就有了一個demo-0.0.1-SNAPSHOT.jar 這麼個的包。

加到項目的lib引用裏面去,然後就可以了。

服務調用:
// 就是這個UserService接口,是在服務Provier裏面定義的接口,這裏要用到才能注入的。
// 就是上面Provier項目的包demo-0.0.1-SNAPSHOT.jar裏面的接口定義
import com.example.demo.dubbo.api.UserService;

@RestController
public class DubboTest {

    // 這個註解會自動注入dubbo遠程的服務的  
    @Reference
    private UserService userService;    

    @RequestMapping("/getDubboTest")
    public String getXhUser() {
        // 這裏的使用 ,就跟本地調用一樣就可以了,沒有差別!!!!!
        return userService.test("Consumer's Test!!");
    }

}

好的,操作結束了

測試一下

訪問http://localhost:8081/getDubboTest 這是Consumer的項目的方法了。

返回內容:this is provider service’s information:Consumer’s Test!!

證明,調用成功了!!!!! 收工了!!!!!!


小結一下

主要還是Dubbo的使用,用起來還是很方便的,不管實現的話,只要配置好,當做本身項目的服務直接調用就好。

注入什麼,都是配置好自動的了,不用管!

糾結的:

因爲,消費Consumer需要使用到服務端Provider的接口定義類,所以項目需要應用Provider的包才行。這個比較麻煩!

所有的對外或者對內調用的接口,需要單獨一個包進行管理。
實現與使用(遠程調用) 都基於這個接口包即可!!


2020-04-15 小杭 (⊙o⊙)… 學不動了啊。。。。。。。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章