SpringBoot開發案例之整合Dubbo提供者(一)
阿新 • • 發佈:2018-11-14
既然是開發案例,顯然不會扯那麼多老婆舌,有不清楚這兩個東東的請自行百度。
開發環境
JDK1.7、Maven、Eclipse、SpringBoot1.5.1、Dubbo2.8.4
專案結構
相關配置
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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.itstyle.dubbo</groupId> <artifactId>spring-boot-dubbo-provider</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springBoot_dubbo_provider</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.7</java.version> </properties> <!-- spring-boot-starter-parent包含了大量配置好的依賴管理,在自己專案新增這些依賴的時候不需要寫<version>版本號 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.1.RELEASE</version> <relativePath/> </parent> <!-- 配置依賴 --> <dependencies> <!-- springboot相關 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- Dubbo相關 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <!-- 這裡使用最新的2.8.4版本,中央倉庫不存在,請自行打入本地倉庫 --> <version>2.8.4</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <!-- zookeeper 註冊中心 --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> <!-- zookeeper 第三方操作工具類 --> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.6</version> </dependency> <!-- javassist 位元組碼類庫 --> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> </dependency> </dependencies> <build> <plugins> <!-- 打包專案 mvn clean package --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <!-- mvn spring-boot:run 熱部署啟動 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.4.0.RELEASE</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>
User.java 一定要實現序列化介面
public class User implements Serializable { private static final long serialVersionUID = -1L; private String username; private Integer age; public User(String username, Integer age) { this.username = username; this.age = age; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
IUserService.java 介面
public interface IUserService {
void saveUser(User user);
}
UserServiceImpl.java 實現
@Service("userService") public class UserServiceImpl implements IUserService { @Override public void saveUser(User user) { System.out.println("儲存使用者:"+user.getUsername()); } }
dubbo.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方應用資訊 -->
<dubbo:application name="springBoot_dubbo_provider" />
<!-- 註冊中心服務地址 -->
<dubbo:registry protocol="zookeeper" address="${dubbo.registry.address}" check="false" />
<!-- 用dubbo協議-->
<dubbo:protocol name="dubbo" port="-1" dispather="all" check="false" />
<dubbo:provider timeout="10000" threads="10" threadpool="fixed" loadbalance="roundrobin"/>
<!-- 宣告需要暴露的服務介面 -->
<dubbo:service interface="com.itstyle.dubbo.service.IUserService" ref="userService"/>
</beans>
application.properties
# 專案contextPath,一般在正式釋出版本中,我們不配置
server.context-path=/provider
# 錯誤頁,指定發生錯誤時,跳轉的URL。請檢視BasicErrorController原始碼便知
server.error.path=/error
# 服務埠
server.port=8080
# session最大超時時間(分鐘),預設為30
server.session-timeout=60
# 該服務繫結IP地址,啟動伺服器時如本機不是該IP地址則丟擲異常啟動失敗,只有特殊需求的情況下才配置
# server.address=192.168.16.11
# tomcat最大執行緒數,預設為200
server.tomcat.max-threads=800
# tomcat的URI編碼
server.tomcat.uri-encoding=UTF-8
#ZooKeeper
dubbo.registry.address=192.168.1.180:2181
logging.level.root=INFO
SpringbootDubboApplication.java 測試類
@SpringBootApplication
@ComponentScan(basePackages={"com.itstyle.dubbo"})
@ImportResource({"classpath:dubbo.xml"})
public class SpringbootDubboApplication implements CommandLineRunner {
@Autowired
private IUserService userService;
public static void main(String[] args) {
SpringApplication.run(SpringbootDubboApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
User user = new User("張三",19);
userService.saveUser(user);
}
}
此時,我們執行SpringbootDubboApplication類,如下結果說明成功:
然後使用ZooInspector檢視zookeeper資訊,會發現註冊了一個提供者:
專案:http://git.oschina.net/52itstyle/springboot_dubbo_provider
作者: 小柒