关于dubbo快速开发和服务提供者无法注册上注意点
Dubbo簡介:? ? ? ??
????????Dubbo提供了三大核心能力:面向接口的遠程方法調用(客戶端-服務消費者 服務-服務提供者 接口一定要一樣),智能容錯和負載均衡,以及服務自動注冊(服務提供者啟動的時候將自己的地址信息寫入注冊中心-zookeeper)和發現(消費者啟動的時候訂閱服務提供者-獲取服務提供者地址信息)。Dubbo官網地址:https://dubbo.apache.org/zh/
dubbo快速開發:??
采用的:idea2020版本、maven依賴、jdk1.8版本。
注意:我用的是mybatis-plus實現的。
對于dubbo沒注冊上或者其他的錯誤需要注意幾點:
0.首先打開zookee,否則啟動就出錯
1.注解導包是dubbo的:service層、并且controller層還使用的是@Reference注解
?
2.配置文件yml:中的內容是否正確格式。配置連接zookeeper是否正確?。導致服務提供者沒注冊上(當初就沒注意一直沒注冊上QAQ,查看了代碼也沒錯)
3.實體類對象需要實現序列化否則訪問地址會報錯:
?報錯idea報錯:
?界面報錯:
?
目錄
Dubbo簡介:? ? ? ??
dubbo快速開發:??
對于dubbo沒注冊上或者其他的錯誤需要注意幾點:
0.首先打開zookee,否則啟動就出錯
1.注解導包是dubbo的:service層、并且controller層還使用的是@Reference注解
2.配置文件yml:中的內容是否正確格式。配置連接zookeeper是否正確?。導致服務提供者沒注冊上(當初就沒注意一直沒注冊上QAQ,查看了代碼也沒錯)
3.實體類對象需要實現序列化否則訪問地址會報錯:
0.準備數據庫:
1. 1.創建父工程(dubbo_parent),
1.1.1.父工程(pom.xml內容)
2.創建實體對象子模塊(dubbo_domain)
2.1.包結構
2.2.User類對象
2.3.實體類對象:pom.xml內容
3.創建服務接口子模塊(dubbo_interface)
3.1.包結構:
?3.2.包下內容
3.2.1服務接口的service接口:
3.3.服務接口:pom.xml內容
4.創建服務提供者模塊(dubbo_provider)
4.1.包結構
?4.2.包下內容
4.2.1.dao層的:UserDao接口
?4.2.2.service的實現類:UserServiceImpl類
4.2.3.服務提供者模塊的啟動類:DubboProviderApplication
4.3.服務提供者配置文件:application.yml
4.4.服務提供者的依賴(pom.xml)
5.創建服務消費者模塊(dubbo_consumer)
5.1.包結構
5.2.包下內容
5.2.1.controller層:UserController
5.2.2消費者啟動類:DubboConsumerApplication
5.2.3.消費者的配置文件:application.yml
5.2.4.消費者的:pom.xml
最后:打開啟動zookeeper服務端->啟動服務提供者->啟動服務消費者->輸入網頁地址:http://localhost:520/find/3得到效果。
6.Dubbo相關配置:
6.1.超時配置:對于dubbo的調用一般為1秒左右,超時會導致出錯。這個一般建議有服務提供者設置:(啟動不會報錯,訪問地址會出錯)
6.2.服務接口訪問協議:
6.3啟動時檢查
6.4.負載均衡
0.準備數據庫:
create database t_dubbo;CREATE TABLE `t_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(20) DEFAULT NULL,`age` int(11) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;INSERT INTO t_user(username,age) VALUES("張三",18); INSERT INTO t_user(username,age) VALUES("李四",22); INSERT INTO t_user(username,age) VALUES("王五",80);1. 1.創建父工程(dubbo_parent),
1.1.1.父工程(pom.xml內容)
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.demon</groupId><artifactId>dubbo_parent</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><!--子模塊--><modules><module>dubbo_domain</module><module>dubbo_interface</module><module>dubbo_provider</module><module>dubbo_consumer</module></modules><!--起步依賴--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.0.RELEASE</version></parent><!--版本依賴--><properties><mysql.version>5.1.47</mysql.version><druid.version>1.0.9</druid.version><lombok.version>1.18.4</lombok.version><mybatis-plus>3.1.1</mybatis-plus></properties><!--依賴--><dependencyManagement><!--mybatis-plus的依賴--><dependencies><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus}</version></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional><version>${lombok.version}</version></dependency><!-- MySql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency></dependencies></dependencyManagement><!--lombok依賴--><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies> </project>2.創建實體對象子模塊(dubbo_domain)
2.1.包結構
2.2.User類對象
package com.demon.pojo;import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable;@Data @NoArgsConstructor @AllArgsConstructor @TableName("t_user") public class User implements Serializable {private Integer id;private String username;private Integer age; }2.3.實體類對象:pom.xml內容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>dubbo_parent</artifactId><groupId>com.demon</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>dubbo_domain</artifactId><dependencies><!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.1.1</version></dependency></dependencies></project>3.創建服務接口子模塊(dubbo_interface)
3.1.包結構:
?3.2.包下內容
3.2.1服務接口的service接口:
package com.demon.service;import com.demon.pojo.User;public interface UserService {public User findById(Integer id); }3.3.服務接口:pom.xml內容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>dubbo_parent</artifactId><groupId>com.demon</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>dubbo_interface</artifactId><!--依賴實體類對象模塊--><dependencies><dependency><groupId>com.demon</groupId><artifactId>dubbo_domain</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies> </project>4.創建服務提供者模塊(dubbo_provider)
4.1.包結構
?4.2.包下內容
4.2.1.dao層的:UserDao接口
package com.demon.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.demon.pojo.User;public interface UserDao extends BaseMapper<User> {}?4.2.2.service的實現類:UserServiceImpl類
package com.demon.service.imp;import com.demon.dao.UserDao; import com.demon.pojo.User; import com.demon.service.UserService; import org.apache.dubbo.config.annotation.Service; import org.springframework.beans.factory.annotation.Autowired;@Service public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;public User findById(Integer id) {System.out.println("調用了provider1,8888端口.......");return userDao.selectById(id);} }4.2.3.服務提供者模塊的啟動類:DubboProviderApplication
package com.demon;import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication @MapperScan("com.demon.dao") public class DubboProviderApplication {public static void main(String[] args) {SpringApplication.run(DubboProviderApplication.class,args);} }4.3.服務提供者配置文件:application.yml
server:port: 1314 #數據庫來源 spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/java_dubbo?useUnicode=true&characterEncoding=utf8username: rootpassword: root dubbo:application:name: dubbo-provider #zookeeper的地址registry:address: zookeeper://127.0.0.1:2181 #掃描servicescan:base-packages: com.demon.service #超時調用:dubbo調用默認1秒鐘超時。 #建議由服務提供方設置超時,因為一個方法需要執行多長時間,服務提供方更清楚。provider:timeout: 3000 #配置服務提供者的協議和端口protocol:name: dubboport: 8888 #mybatis-plus的配置 mybatis-plus:global-config:db-config:#跟隨數據庫主鍵自增id-type: auto4.4.服務提供者的依賴(pom.xml)
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>dubbo_parent</artifactId><groupId>com.demon</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>dubbo_provider</artifactId><dependencies><!--依賴--><dependency><groupId>com.demon</groupId><artifactId>dubbo_interface</artifactId><version>1.0-SNAPSHOT</version></dependency><!--mybatsi-plus依賴--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency><!--springboot基礎起步依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--dubbo的起步依賴--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.5</version></dependency><!-- zookeeper的api管理依賴 --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.2.0</version></dependency><!-- zookeeper依賴 --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.12</version></dependency> </dependencies> </project>5.創建服務消費者模塊(dubbo_consumer)
5.1.包結構
5.2.包下內容
5.2.1.controller層:UserController
package com.demon.cotroller;import com.demon.pojo.User; import com.demon.service.UserService; import org.apache.dubbo.config.annotation.Reference; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController;@RestController public class UserController {@Referenceprivate UserService userService;@GetMapping("/find/{id}")public User findById(@PathVariable("id") Integer id){User user = userService.findById(id);return user;} }5.2.2消費者啟動類:DubboConsumerApplication
package com.demon;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication public class DubboConsumerApplication {public static void main(String[] args) {SpringApplication.run(DubboConsumerApplication.class,args);} }5.2.3.消費者的配置文件:application.yml
server:port: 520 dubbo:application:name: dubbo_consumer #zookeeper的地址registry:address: zookeeper://127.0.0.1:2181 #啟動時檢查:不設置需要先啟動服務提供者才能啟動消費者不然會報錯consumer:check: false5.2.4.消費者的:pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>dubbo_parent</artifactId><groupId>com.demon</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>dubbo_consumer</artifactId><dependencies><dependency><groupId>com.demon</groupId><artifactId>dubbo_interface</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--dubbo的起步依賴--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.5</version></dependency><!-- zookeeper的api管理依賴 --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.2.0</version></dependency><!-- zookeeper依賴 --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.12</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.8</version></dependency></dependencies> </project>最后:打開啟動zookeeper服務端->啟動服務提供者->啟動服務消費者->輸入網頁地址:http://localhost:520/find/3得到效果。
注意:啟動服務消費者和服務提供者有啟動先后順序,如果沒設置啟動時檢查為false(這里設置了false)先啟動服務消費者會報錯。
6.Dubbo相關配置:
6.1.超時配置:對于dubbo的調用一般為1秒左右,超時會導致出錯。這個一般建議有服務提供者設置:(啟動不會報錯,訪問地址會出錯)
例如設置服務提供者睡眠1.5秒:
?出錯訪問的頁面:
修改服務提供者或者服務消費者yml的配置:
dubbo:#修改的是服務提供者provider: #如果是服務消費者為consumer:timeout: 30006.2.服務接口訪問協議:
服務提供方可以配置許多種不同的協議:Dubbo支持的協議有:dubbo、rmi、hessian、http、webservice、rest、redis等。
可以去官方文檔查看更多:Dubbo官網地址:https://dubbo.apache.org/zh/
服務提供者的配置文件:
#配置服務提供者的協議和端口protocol:name: dubboport: 88886.3啟動時檢查
如果想不管服務提供者是否啟動都可以先啟動服務消費者可以配置下面的。
開發階段check值設置為false,生產環境改為true。
如果設置為true,啟動服務消費者,會拋出異常,表示沒有服務提供者
消費者的:yml配置
#啟動時檢查:不設置需要先啟動服務提供者才能啟動消費者不然會報錯consumer:check: false6.4.負載均衡
負載均衡(Load Balance):其實就是將請求分攤到多個操作單元上進行執行,從而共同完成工作任務。 在集群負載均衡時,Dubbo 提供了多種均衡策略(包括隨機random、輪詢roundrobin、最少活躍調用數leastactive),缺省【默認】為random隨機調用。
服務消費者yml配置
dubbo:consumer:loadbalance: roundrobin正式生產環境中,服務提供者部署到多臺機器上,不需要修改任何代碼,只需要部署到不同機器即可測試。
增加一個服務提供者,提供相同的服務;
如果是單機測試,必須通過修該提供者的dubbo協議端口和web服務端口來進行部署。
然后可以通過service接口的實現類里面的輸出語句不同。在訪問地址查看不同。
總結
以上是生活随笔為你收集整理的关于dubbo快速开发和服务提供者无法注册上注意点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 心术第一
- 下一篇: 如何读取csv文件并将其转化为tsv文件