Dubbo23_Dubbo相關配置說明6

花溪月影發表於2024-03-22

一、包掃描

<dubbo:annotation package="com.itheima.service" />

 服務提供者和服務消費者都需要配置,表示包掃描,作用是掃描指定包(包括子包)下的類。

 如果不使用包掃描,也可以透過如下配置的方式來發布服務-不推薦:

<bean id="helloService" class="com.itheima.service.impl.HelloServiceImpl" />
<dubbo:service interface="com.itheima.api.HelloService" ref="helloService" />

 作為服務消費者,可以透過如下配置來引用服務:

<!-- 生成遠端服務代理,可以和本地bean一樣使用helloService -->
<dubbo:reference id="helloService" interface="com.itheima.api.HelloService" />

 上面這種方式釋出和引用服務,一個配置項(<dubbo:service>、<dubbo:reference>)只能釋出或者引用一個服務,如果有多個服務,這種方式就比較繁瑣了。

 推薦使用包掃描方式

二、協議

<dubbo:protocol name="dubbo" port="20880"/>

 一般在服務提供者一方配置,可以指定使用的協議名稱和埠號。

 其中Dubbo支援的協議有:dubbo、rmi、hessian、http、webservice、rest、redis等。

 推薦使用的是dubbo協議

 dubbo 協議採用單一長連線和 NIO 非同步通訊,適合於小資料量大併發的服務呼叫,以及服務消費者機器數遠大於服務提供者機器數的情況。不適合傳送大資料量的服務,比如傳檔案,傳影片等,除非請求量很低。

 也可以在同一個工程中配置多個協議,不同服務可以使用不同的協議,例如:

<!-- 多協議配置 -->
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:protocol name="rmi" port="1099" />
<!-- 使用dubbo協議暴露服務 -->
<dubbo:service interface="com.itheima.api.HelloService" ref="helloService" protocol="dubbo" />
<!-- 使用rmi協議暴露服務 -->
<dubbo:service interface="com.itheima.api.DemoService" ref="demoService" protocol="rmi" /> 

三、啟動時檢查

<dubbo:consumer check="false"/>

 上面這個配置需要配置在服務消費者一方,如果不配置預設check值為true。Dubbo 預設會在啟動時檢查依賴的服務是否可用,不可用時會丟擲異常,阻止 Spring 初始化完成,以便上線時,能及早發現問題。可以透過將check值改為false來關閉檢查。

 建議在開發階段將check值設定為false,在生產環境下改為true。

四、負載均衡

 負載均衡(Load Balance):其實就是將請求分攤到多個操作單元上進行執行,從而共同完成工作任務。

 在叢集負載均衡時,Dubbo 提供了多種均衡策略(包括隨機、輪詢、最少活躍呼叫數、一致性Hash),預設為random隨機呼叫。

 配置負載均衡策略,既可以在服務提供者一方配置,也可以在服務消費者一方配置,如下:

@Controller
    @RequestMapping("/demo")
    public class HelloController {
        //在服務消費者一方配置負載均衡策略
        @Reference(check = false,loadbalance = "random")
        private HelloService helloService;

        @RequestMapping("/hello")
        @ResponseBody
        public String getName(String name){
            //遠端呼叫
            String result = helloService.sayHello(name);
            System.out.println(result);
            return result;
        }
    }
//在服務提供者一方配置負載均衡
@Service(loadbalance = "random")
public class HelloServiceImpl implements HelloService {
    public String sayHello(String name) {
        return "hello " + name;
    }
}

 可以透過啟動多個服務提供者來觀察Dubbo負載均衡效果。

 注意:因為我們是在一臺機器上啟動多個服務提供者,所以需要修改tomcat的埠號和Dubbo服務的埠號來防止埠衝突。

 在實際生產環境中,多個服務提供者是分別部署在不同的機器上,所以不存在埠衝突問題。

相關文章