首先需要先下载zk,然后运行,这里网上很多,不在赘述。
接着新建maven工程,我这里规划时这样的,一个consumer工程(服务消费者),一个provider工程(服务提供者),还有一个interface工程(公共接口依赖包,抽象出的服务提供方公共接口)。
1.先建立interface工程,然后打jar包,之后引入本地maven仓库
接口:
package com.example.demo.service;
public interface DubboService {
public String findName() ;
}
这里要注意的是如何把工程打成jar包
需要再pom文件<plugins>下添加配置,把自带的spring-boot-maven-plugin这个plugin删除
<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classesDirectory>target/classes/</classesDirectory>
<archive>
<manifest>
<mainClass>com.alibaba.dubbo.container.Main</mainClass>
<!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
<useUniqueVersions>false</useUniqueVersions>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<!-- 把依赖的jar包,打成一个lib文件夹 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeTypes>jar</includeTypes>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
然后右击工程-》run as-》maven install。接着在target文件夹下就会产生jar包(没有就刷新下工程)
接着就是想办法把jar包引入maven仓库
进入命令行界面输入
mvn install:install-file -Dfile=D:\workspace\dubboInterface\target\demo-0.0.1-SNAPSHOT.jar -DgroupId=com.sina -DartifactId=demo-0.0.1-SNAPSHOT -Dversion=1.0 -Dpackaging=jar
参数解析:
-Dfile:jar包路径
-DgroupId和-DartifactId是定义jar包在maven仓库的位置
执行成功后即可在pom文件引用jar包了(有人eclipse配置的settings和系统安装maven目录settings不是同一个,会造成jar包注入到默认文件夹下,这里需要修改安装的maven里conf下settings本地仓库的位置)
2.接下来就是建立consumer工程。
首先贴上pom文件
首先需要先下载zk,然后运行,这里网上很多,不在赘述。
接着新建maven工程,我这里规划时这样的,一个consumer工程(服务消费者),一个provider工程(服务提供者),还有一个interface工程(公共接口依赖包,抽象出的服务提供方公共接口)。
1.先建立interface工程,然后打jar包,之后引入本地maven仓库
接口:
package com.example.demo.service;
public interface DubboService {
public String findName() ;
}
这里要注意的是如何把工程打成jar包
需要再pom文件<plugins>下添加配置,把自带的spring-boot-maven-plugin这个plugin删除
<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classesDirectory>target/classes/</classesDirectory>
<archive>
<manifest>
<mainClass>com.alibaba.dubbo.container.Main</mainClass>
<!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
<useUniqueVersions>false</useUniqueVersions>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<!-- 把依赖的jar包,打成一个lib文件夹 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeTypes>jar</includeTypes>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
然后右击工程-》run as-》maven install。接着在target文件夹下就会产生jar包(没有就刷新下工程)
接着把jar包放在一个地方,把jar包引入maven仓库
进入命令行界面输入
mvn install:install-file -Dfile=D:\workspace\dubboInterface\target\demo-0.0.1-SNAPSHOT.jar -DgroupId=com.sina -DartifactId=demo-0.0.1-SNAPSHOT -Dversion=1.0 -Dpackaging=jar
参数解析:
-Dfile:jar包路径
-DgroupId和-DartifactId是定义jar包在maven仓库的位置
执行成功后即可在pom文件引用jar包了(有人eclipse配置的settings和系统安装maven目录settings不是同一个,会造成jar包注入到默认文件夹下,这里需要修改安装的maven里conf下settings本地仓库的位置)
2.接下来就是建立consumer工程。
结构贴一下,我这里是有链接数据库,可以忽略。
首先pom文件引入配置
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.8</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 本地公共接口jar包 。注意这里是引入刚刚注入到maven仓库的公共接口jar包-->
<dependency>
<groupId>com.sina</groupId>
<artifactId>demo-0.0.1-SNAPSHOT</artifactId>
<version>1.0</version>
</dependency>
spring-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="consumer"/>
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<dubbo:protocol name="dubbo" port="20881"/>
<dubbo:reference id="dubboService" check="false" interface="com.example.demo.service.DubboService"/>
<dubbo:annotation package="controller"/>
</beans>
application.yml配置(可以只配置端口,忽略数据库连接配置)
server:
port: 8083
spring:
datasource:
name: localhost
url: jdbc:mysql://localhost:3306/mydata?useUnicode=true&;characterEncoding=utf8
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
dbcp:
max-active: 20
initial-size: 5
min-idle: 5
max-wait: 5000
mybatis:
mapper-locations: classpath:mapping/*.xml
type-aliases-package: com.example.demo.model
DemoApplication.java在添加注解
@MapperScan("com.example.demo.mapper")//支持mybatis可以忽略
@ImportResource({"classpath:spring-dubbo.xml"})//加载dubbo配置文件
编写测试类
这样就配置完成了。
接着provider工程建立
目录结构和consumer一样
pom文件的引入
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.5</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--zookeeper的客户端依赖-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>${zkclient.version}</version>
</dependency>
<dependency>
<groupId>com.sina</groupId>
<artifactId>demo-0.0.1-SNAPSHOT</artifactId>
<version>1.0</version>
</dependency>
spring-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="provider"/>
<!-- 注册中心的ip地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->
<!-- <dubbo:annotation package="service.impl"/> -->
<!-- use dubbo protocol to export service on port 20880 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- service implementation, as same as regular local bean -->
<bean id="dubboService" class="com.example.demo.service.impl.DubboServiceImpl"/>
<!-- declare the service interface to be exported -->
<dubbo:service interface="com.example.demo.service.DubboService" ref="dubboService"/>
</beans>
application.properties(和yml一样的功能)
server.port=8081
spring.datasource.name=localhost
spring.datasource.url=jdbc:mysql://localhost:3306/mydata?useUnicode=true&;characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dbcp.max-active=20
spring.datasource.dbcp.initial-size=5
spring.datasource.dbcp.min-idle=5
spring.datasource.dbcp.max-wait=9000
mybatis.mapper-locations=classpath:mapping/*.xml
mybatis.type-aliases-package=com.example.demo.model
ServiceApplication.java
类需实现引入jar包里的公共接口
这样工程就ok了。
启动zk,运行工程。
通过zkCli.cmd(windows系统)进入zk,通过命令可以看到注册的接口
我们在查看两个服务都已经注册
接着调用就行了,后面的运行方法就不多说了,因为下班了,哈哈哈哈哈