先引入dubbo相关包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.8.3</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.5</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.1</version>
</dependency>
一、服务端
准备好provider.xml,放入resources目录,随便放哪个位置,只要能加载
<?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"
xmlns:context="http://www.springframework.org/schema/context"
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 http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--当前项目在整个分布式架构里面的唯一名称,计算依赖关系的标签-->
<!-- <dubbo:application name="provider" owner="generateArchivePackage"/>-->
<dubbo:application name="provider" owner="generateArchivePackage">
<dubbo:parameter key="qos.enable" value="true"/>
<dubbo:parameter key="qos.accept.foreign.ip" value="false"/>
<dubbo:parameter key="qos.port" value="21811"/>
</dubbo:application>
<dubbo:monitor protocol="registry"/>
<!--dubbo这个服务所要暴露的服务地址所对应的注册中心-->
<!--<dubbo:registry address="N/A"/>-->
<!-- <dubbo:registry address="N/A" />-->
<dubbo:registry address="zookeeper://localhost:2181" check="false"/>
<!--当前服务发布所依赖的协议;webserovice、Thrift、Hessain、http-->
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:annotation package="com.ybarchives.generateArchivePackage.impl.GenerateServiceImpl"/>
<!--服务发布的配置,需要暴露的服务接口-->
<!-- <dubbo:service-->
<!-- interface="com.ybarchives.generateArchivePackage.IGenerateService"-->
<!-- ref="generateService"/>-->
<!--Bean bean定义-->
<!-- <bean id="generateService" class="com.ybarchives.generateArchivePackage.impl.GenerateServiceImpl"/>-->
</beans>
1. <dubbo:annotation package="com.ybarchives.generateArchivePackage.impl.GenerateServiceImpl"/> 2. <!--服务发布的配置,需要暴露的服务接口--> <dubbo:service--> interface="com.ybarchives.generateArchivePackage.IGenerateService"--> ref="generateService"/> <!--Bean bean定义--> <bean id="generateService" class="com.ybarchives.generateArchivePackage.impl.GenerateServiceImpl"/>
重点:1和2任选一种配置
选1【推荐】:这种方式可以在服务端使用@autowired,@value等注解
①需要在客户端impl层加入service注解【是dubbo包的service!】
②需要在启动项加注解
@EnableDubboConfig @DubboComponentScan
③配置yml加入配置
dubbo:
application:
name: provider
registry:
address: zookeeper://127.0.0.1:2181
protocol:
name: dubbo
port: 20882
monitor:
protocol: registry
服务端xml示例:
service层
public interface IGenerateService {
String say();
}
impl层
import com.alibaba.dubbo.config.annotation.Service;
@Service
public class GenerateServiceImpl implements IGenerateService {
//网上的大部份文章都只有简单的hello,world,
//该类一旦遇到有其他注解就凉凉,所以provider.xml需要使用dubbo:annotation
//dubbo:annotation使用后,①springboot启动类就需要使用注解②yml配置加dubbo配置
@Autowired
public JdbcTemplate jdbcTemplate;
@Value("${generatearchivepackage.path}")
private String doloadPath;
@Override
public String say() {
return "hello";
}
}
总结:反正在客户端正常写代码就行了,最好加dubbo包的service注解
启动:
1.如果xml使用dubbo:annotation,则在启动类加@注解【推荐】
2.如果xml使用dubbo:service在springboot启动类main方法加这两句代码。
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/provider.xml");
context.start();
启动成功后dubbo admin出现服务
二、消费端
准备consumer.xml放入resource下面
<?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:annotation package="com.ybarchives.generateArchivePackage"></dubbo:annotation>-->
<!--当前项目在整个分布式架构里面的唯一名称,计算依赖关系的标签-->
<dubbo:application name="consumer" owner="generateArchivePackage"/>
<!--dubbo这个服务所要暴露的服务地址所对应的注册中心-->
<!--点对点的方式-->
<!-- <dubbo:registry address="N/A" />-->
<dubbo:registry address="zookeeper://localhost:2181" check="false"/>
<!--生成一个远程服务的调用代理-->
<!--点对点方式-->
<dubbo:reference id="generateService"
interface="com.ybarchives.generateArchivePackage.IGenerateService" check="false"/>
</beans>
新建一个同样的包,下面只写一个Service
public interface IGenerateService {
public String say() ;
}
yml文件写一个配置,如果不写这个会报错
dubbo:
application:
name: consumer
registry:
address: zookeeper://127.0.0.1:2181
protocol:
name: dubbo
port: 20882
monitor:
protocol: registry
启动项新增注解:
@EnableDubboConfig @DubboComponentScan或者@EnableDubbo=》@EnableDubboConfig和@DubboComponentScan属于@EnableDubbo
dubbo amdin:
三、使用
1.直接使用注解
@Reference(check = false) 这里还有一个延时的坑,如果服务端代码执行时间过长 ,需要设置timeout = 60000 , 假如check不设置,或者为true,在服务端挂掉后项目会无法启动,因为启动项加了注解,会自动扫描dubbo相关。
2.通过加载xml文件:这种方式只有在运行
context.getBean
时才会在dubbo amdin显示进程,运行完后马上消失
public static void main(String[] args) {
ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("META-INF/spring/consumer.xml");
context.start();
IGenerateService providerService = (IGenerateService) context.getBean("generateService");
String str = providerService.say();
System.out.println(str);
}
四、其他
zookeeper比较好安装,在网上找其他的文章随便安装就行了。dubbo admin我找了一个war包,迟一点放一个连接下载https://download.csdn.net/download/qq_32736535/88478380,放到tomcat下面可直接运行,D:\T8\webapps\dubbo-admin\WEB-INF\dubbo.properties 找到dubbo.properties修改相关配置