springboot 整合dubbox
1, 沒了,,,
2, 安裝zookeeper
可見: http://www.cnblogs.com/wenbronk/p/6636926.html
2.1 下載:
wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.8/
解壓:
tar -zxf zookeeper-3.4.8.tar.gz
修改配置文件:
cd zookeeper-3.4.8/conf cp zoo_sample.cfg zoo.cfg # zookeeper 默認是用../conf/zoo.cfg 如果沒有這個文件則報錯 vim zoo.cfg
其他, 能啟動就行吧
cd zookeeper-3.4.8/bin ./start.sh start #啟動zookeeper 關閉: ./start.sh stop
我的zookeeper是安裝在docker上的, 安裝方式可見: http://www.cnblogs.com/wenbronk/p/6438492.html
3, maven工程
|--dubbo-prent 父工程(pom) | |_____dubbo-cosumer 消費者(war) | |_____duboo-provide 生產者(pom) |
|_____interface 消費者和生產者都依賴這個, 一個接口, 實現rpc(jar)
|
|_____service 實際的rpc調用的方法(war)
其中interface 被 dubbo-consumer和service所依賴
4, parent
parent主要用來統一管理使用的, 在其pom中進行jar包的統一依賴管理
pom.xml配置:
<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.wenbronk</groupId> <artifactId>dubbo-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <!-- 添加父依賴 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <properties> <spring-boot.version>1.5.2.RELEASE</spring-boot.version> <java.version>1.8</java.version> <fastjson.version>1.2.21</fastjson.version> <dubbo-spring-boot>1.0.0</dubbo-spring-boot> </properties> <dependencyManagement> <dependencies> <!-- Spring Boot Dubbo 依賴 --> <dependency> <groupId>io.dubbo.springboot</groupId> <artifactId>spring-boot-starter-dubbo</artifactId> <version>${dubbo-spring-boot}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> </dependencies> </dependencyManagement> </project>
5, dubbo-provide, 這兒沒什么用, 管理生產者和接口, 實際中還可以用來依賴統一的工具包等
pom.xml中沒啥東西
<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> <parent> <groupId>com.wenbronk</groupId> <artifactId>dubbo-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>dubbo-provide</artifactId> <packaging>pom</packaging> <modules> <module>dubbo-provide-service</module> <module>dubbo-provide-interface</module> </modules> </project>
6, interface:
用來rpc調用的接口, 只有一個類:
TestService.java
package com.wenbronk.dubbo.service; public interface TestService { public String test(); }
7, service
服務的生產者:
pom.xml中用來依賴包
<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> <parent> <groupId>com.wenbronk</groupId> <artifactId>dubbo-provide</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>dubbo-provide-service</artifactId> <packaging>war</packaging> <dependencies> <!-- exclude掉spring-boot的默認log配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- spring-boot的web啟動的jar包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 為了構建一個即是可執行的,又能部署到一個外部容器的war文件,你需要標記內嵌容器依賴為"provided" --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>io.dubbo.springboot</groupId> <artifactId>spring-boot-starter-dubbo</artifactId> </dependency> <!-- Spring Boot Test 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.wenbronk</groupId> <artifactId>dubbo-provide-interface</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <!-- main方法運行需要 --> <!-- 加入熱部署插件, spring-boot:run可用 --> <!-- java可用, 需要下載jar包放在lib下, 然后修改vm參數 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin </artifactId> <dependencies> <!--springloaded hot deploy --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.6.RELEASE</version> </dependency> </dependencies> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>exec</classifier> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
發布dubbo服務, 在application.properties中加入以下配置:
server.port=8081 # Dubbo 消費者 spring.dubbo.application.name=provider spring.dubbo.registry.address=zookeeper://192.168.50.202:2181 spring.dubbo.protocol.name=dubbo spring.dubbo.protocol.port=20880 spring.dubbo.scan=com.wenbronk.dubbo
注意配置 scan的掃描路徑
App.java
package com.wenbronk.dubbo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class App { public static void main(String[] args) throws Exception { SpringApplication.run(App.class, args); } }
TestServiceImpl.java
package com.wenbronk.dubbo.service.impl; import com.alibaba.dubbo.config.annotation.Service; import com.wenbronk.dubbo.service.TestService; @Service(version="1.0.0") public class TestServiceImpl implements TestService { @Override public String test() { System.out.println("success"); return "finally, i am coming"; } }
8, 最后, 是cosumer
pom.xml中配置, 同service中一樣,
application.properties
## 避免和 server 工程端口沖突 server.port=8080 ## Dubbo 服務消費者配置 spring.dubbo.application.name=consumer spring.dubbo.registry.address=zookeeper://192.168.50.202:2181 spring.dubbo.scan=com.wenbronk.dubbo
App.java 同service一樣
TestController.java
package com.wenbronk.dubbo.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.alibaba.dubbo.config.annotation.Reference; import com.wenbronk.dubbo.service.TestService; @RestController public class TestController { @Reference(version="1.0.0") private TestService testService; @RequestMapping("/abc") public String test() { System.out.println("controller.sucess"); testService.test(); return "success"; } }
最初因為說dubbo-start不支持新的spring了, 所以下載了當當的dubbox自己編譯, 后來發現, 還是可以用的
附: dubbox編譯
dubbo, 阿里不維護了, 當當繼續開源: 因為沒有發布在倉庫, 所以自己編譯
git clone https://git.oschina.net/smarti/spring-boot-mybatis-sample.git
然后跳過test進行編譯, 可以發布在本地倉庫中
mvn install -Dmaven.test.skip=true
聽說用注解的話, 不支持事物, 還沒遇到, 遇到在更新