圖解。
一、dubbo使用須知。
1.所有的service層必須要使用service注解(之前用的spring框架的,現在用dubbo框架所提供的@Service注解) // @Service(timeout=單位是秒) 2.在配置dubbo端口號的時候 只是provider項目和consumer項目直接數據通訊的時候所必需的要遵循的端口號 也就是說必須要注意無論是provider還是consumer,所配置的dubbo端口號必須要保持一致 端口號隨意定制!!!
1.1.provider的config下的application.properties的配置。 和數據庫交互 和consumer 訂制dubbo的端口號配置 zookeeper的端口號:2181!!!
server.port=8081 server.context-path=/zxf spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/qy200?useSSL=false spring.datasource.username=root spring.datasource.password=root spring.datasource.type=com.alibaba.druid.pool.DruidDataSource mybatis.type-aliases-package=com.aaa.zxf.dubbo.model mybatis.mapper-locations=classpath:mapper/*Mapper.xml #dubbo 的配置 dubbo的應用名。 在dubbo的項目 可以直接看出改項目是一個什么樣的項目 #dubbo-admin 生產者/消費者------application name----需要根據當前項目 #所提供的功能進行命名
dubbo.application.name=user-provider #協議 protocol 配置該項目遠程調用的時候所用的協議--dubbo TCP 和 upd..
dubbo.protocol.name=dubbo #配置dubbo 所必需使用的端口號 # 注意!!! provider 和 consumer 所配置的端口號保持一致 號 隨意訂制。
dubbo.protocol.port=20881 #zookeeper的通訊地址 dubbo框架集成zookeeper #provider 需要向zookeeper注冊服務,要讓provider知道 zookeeper是哪一個! #【注意!!!】 dubbo 和 provider 以及 consumer的zookeeper的配置中 所有的zookeeper集群 leader 和 follower都可以配 # 因為最終 無論是leader 還是follower 都可以配 (除非leader 宕機) # zookeeper的端口號就是 2181 需要保持一致!!
dubbo.registry.address=zookeeper://192.168.132.133:2181 # provider 需要讓zookeeper知道 那一個類需要 注冊到zookeeper中 #dubbo 包的掃描 改包以及所有的子類 都會注冊到zookeeper中
dubbo.scan.base-packages=com.aaa.zxf.dubbo.service.impl # dubbo 根據application 中所配置的dubbo.scan.base-packages 屬性來判定 該項目是 provider 還是 consumer #開啟我的 zookeeper
1.2 consumer 下的config application.properties的配置。。。 調用provider,負責和用戶交互。 HTML 。。。 配置文件中, 少一個對包的掃描!!!
server.port=8084 server.context-path=/zxf #dubbo 的配置 #consumer 中 dubbo的配置和provider中只差了一行 不需要配置掃描包 dubbo.application.name=user-consumer #dubbo的協議名稱 dubbo.protocol.name=dubbo #dubbo 的協議端口號 provider 和 consumer 需要保持一致!!! dubbo.protocol.port=20881 #注冊中心的地址 leader 和 follower的ip 都可以!!! dubbo.registry.address=zookeeper://192.168.132.133:2181 # thymeleaf 開啟不嚴謹的檢查方式 需要導入jar包 spring.thymeleaf.mode=LEGACYHTML5 # springboot 使用 thymeleaf 關閉緩存 spring.thymeleaf.cache=false
3.無論是在dubbo還是在provider以及consumer的zookeeper配置中 所有的zookeeper集群無論是leader還是follower都可以配 eg: zookeeper01是leader dubbo-admin--把zookeeper的配置改為-->zookeeper01 zookeeper02是leader dubbo-admin--把zookeeper的配置改為-->zookeeper01 因為最終無論配置是leader還是follower都會把請求轉交給leader(除非leader宕機) // 所有的zookeeper配置的端口號都應該是2181 因為dubbo中端口號就是2181 4.dubbo如何判定項目為服務生產者還是服務消費者? 是根據application.properties中所配置的dubbo.scan.base-packages屬性來進行判定該項目是provider還是consumer 5.無論是provider還是consumer,service包必須要保持一致 provider-->IUserService:com.aaa.lee.dubbo.service consumer-->IUserService:com.aaa.lee.dubbo.service 並且兩個接口的名字也必須要保持一致!!!! // 接口中方法也必須要保持一致(返回值名稱,返回值類型,方法名,方法參數) 6.consumer項目中的controller需要調用service的時候,不能再使用@Autowired注解進行注入service 因為整個consumer項目中只有service的接口並沒有實現類 // 需要使用dubbo所提供的@Reference 7.provider和consumer的application.properties配置文件中dubbo.application.name不能一樣!!!! provider: dubbo.application.name=user-provider consumer: dubbo.application.name=user-consumer 8.無論是provider還是consumer項目都必須要把zookeeper的地址配置一致!!! 不要求必須配置leader--->follower會自動把請求轉交給leader 9.所有的實體類必須要實現序列化接口 因為實現了序列化接口的實體類都可以把實體類以流的形式進行發送 provider會把User實體類轉換為二進制流----->發送給consumer---->consumer所接收到的並不是一個User對象,而是一個二進制流 ---->consumer必須要把整個二進制流轉換為User對象才可以使用! 也就是說無論是consumer還是provider都必須要實現序列化接口