Dubbo和Dubbox简单使用
来源:互联网 发布:加拿大进出口贸易数据 编辑:程序博客网 时间:2024/06/05 06:11
一、第一个Dubbo程序
provider 目录结构
ProviderService类代码 提供服务的接口
public interface ProviderService {
public String sayHello(String name);
public List<String> getStrs();
}
ProviderServiceImpl代码 服务实现类
public class ProviderServiceImpl implements ProviderService {
@Override
public String sayHello(String name) {
return "Hello "+ name;
}
@Override
public List<String> getStrs() {
List<String> lists=new ArrayList<String>();
lists.add("hello");
lists.add("world");
return lists;
}
}
StartDubboProvider类代码 启动dubbo
public class StartDubboProvider {
public static void main(String[] args) throws Exception {
//加载provider.xml 配置文件
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "provider.xml" });
//启动 注册的服务
context.start();
System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟
}
}
provider.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
">
<!-- 具体的实现bean -->
<bean id="providerService" class="com.xiaozhou.service.impl.ProviderServiceImpl" />
<!-- 给应用起个名字 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="firsrtprovider" />
<!-- 使用zookeeper注册中心暴露服务地址 backup配的是zookeeper的备用地址 -->
<dubbo:registry address="zookeeper://node22:2181?backup=node33:2181,node44:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 写操作可以设置retries=0 避免重复调用SOA服务 -->
<dubbo:service retries="0" interface="com.xiaozhou.service.ProviderService" ref="providerService" />
</beans>
consumer 项目结构
ProviderService类代码 提供服务的接口 这个类要和provider中的ProviderSerivce一样 或者把provider项目打成jar包放到consumer项目中
public interface ProviderService {
public String sayHello(String name);
public List<String> getStrs();
}
TestConsumer 类代码 测试消费信息
public class TestConsumer {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "consumer.xml" });
context.start();
//得到提供服务的类
ProviderService providerService=(ProviderService) context.getBean("consumerService");
//调用服务的方法
String sayHello = providerService.sayHello("张三");
System.out.println(sayHello);
List<String> list = providerService.getStrs();
for (String string : list) {
System.out.println(string);
}
}
}
consumer.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://node22:2181?backup=node33:2181,node44:2181" />
<!-- 生成远程服务代理,可以像使用本地bean一样使用demoService 检查级联依赖关系 默认为true 当有依赖服务的时候,需要根据需求进行设置 -->
<!-- interface 要和provider配置的一样 -->
<dubbo:reference id="consumerService" check="false" interface="com.xiaozhou.service.ProviderService" />
</beans>
二、管理界面配置
1、解压dubbo-admin-2.5.4.war 文件 命令 unzip dubbo-admin-2.5.4.war -d dubbo-admin
2、删除dubbo-admin-2.5.4.war 防止启动tomcat的时候 自动解压这个war包
3、修改dubbo-admin/WEB-INF/dubbo.properties 修改内容如下
#zookeeper 地址 监控配置的zookeeper下的dubbo服务
#zookeeper 集群搭建参考https://my.oschina.net/xiaozhou18/blog/787132
dubbo.registry.address=zookeeper://node22:2181?backup=node33:2181,node44:2181
#登录管理界面用户名
dubbo.admin.root.password=root
#登录管理界面密码
dubbo.admin.guest.password=root
4、启动tomcat
5、在浏览器 输入 http://node22:8080/dubbo-admin/ 出现如下图 表示管理界面配置成功
可以在这里对dubbo进行各种配置 可以把provider打成jar包放在多个服务器上对外提供服务
可以根据每台机器的性能手动设置 负载均衡 权重调节等
三、dubbo xml中参数解释
retries 表示重试次数 默认是2次
当请求dubbo服务时间太长或者失败 会进行多次重新请求 请求次数就是这个参数配的值 一般当写的操作时会将这个值设置成0 表示失败就失败了不进行重新请求 防止多次请求造成写入重复数据
check 默认是true
表示一个provider 要依赖其他的provider的时候 true表示 启动provider的时候会检查要依赖的那个provider是否已经起来 如果没起来会报错 false 表示不检查
当一个provider 要依赖另一个provider的时候 在provider中配置
<!-- 注意这里,我们在使用DependencyService的时候,这个服务可能需要依赖某一个服务,比如providerService 检查级联依赖关系 默认为true 当有依赖服务的时候,需要根据需求进行设置 -->
<dubbo:reference id="providerService " check="true"
interface="bhz.dubbo.sample.provider.SampleService" />
四、dubbox
dubbox管理界面配置和dubbo一样 也是要改dubbo.properties文件 dubbo 2.8.4之后的就是dubbox
1、dubbox 注解
在对外服务接口的实现类上添加 一个spring的注解 一个是alibaba的注解
@Service("simpleService")
@com.alibaba.dubbo.config.annotation.Service(interfaceClass=xiaozhou.service.SimpleService.class, protocol={"dubbo"},retries=0)
interfaceClass 要对外提供服务的接口
protocol 对外提供的协议
retries重试次数
如果采用注解的方式 要在dubbo 的xml中配置 <dubbo:annotation package="xiaozhou.service" />表示自动扫描要对外提供的接口服务
2、dubbox restful风格
(1)、dubbo的xml中配置 如果想dubbo和rest都支持 就都要配上
<dubbo:protocol name="dubbo"/> 表示支持dubbo服务
<!-- rest 的方式要利用内置的tomcat port 是tomcat对外提供的端口 contextpath 访问方法时的根路径 accepts 接受请求数量-->
<dubbo:protocol name="rest" server="tomcat" port="8888" contextpath="provider" accepts="500" /> 表示支持restful风格服务
可以通过dubbo或http url的方式请求dubbo服务
(2)、在对外服务接口的实现类上添加
//这里是spring的注解
@Service("userService")
//这个是dubbo的注解(同时提供dubbo本地,和rest方式) 如个只想支持一种服务protocol = {"rest", "dubbo"} 这个里面就写一个即可
@com.alibaba.dubbo.config.annotation.Service(interfaceClass=xiaozhou.service.UserService.class, protocol = {"rest", "dubbo"}, retries=0)
(3)、在对外服务接口或者实现类上和方法上添加 以下注解 最好是在接口类和方法上添加
//rest请求的路径
@Path("/userService")
//传出数据格式表示支持xml和json(输出)
@Consumes({"application/json", "text/xml"})
//传入数据格式表示支持xml和json(输入)
@Produces({"application/json", "text/xml"})
public interface UserService{
//rest 的GET请求 要访问这个方法的路径 是http://localhost:8888/provider/userService/testget
@GET
@Path("/testget")
public void testget();
@GET
@Path("/getUser")
public User getUser();
@GET
@Path("/getUser/{id}")
//@Path("/get/{id : \\d+}") 可以对传入的值用正则表达式进行限制 \\d+表示数字
public User getUser(@PathParam(value = "id") Integer id);
@GET
@Path("/getUser/{id}/{name}")
//@Path("/get/{id : \\d+}/{name : [a-zA-Z][0-9]}") id只能是数字 name只能是一个字母加一个数字 如a1
public User getUser(@PathParam(value="id") Integer id,@PathParam(value="name") String name);
@POST //POST请求
public void testpost();
@POST
@Path("/postUser") //POST请求 传递一个User对象 会根据@Produces这个注解自动转换成json或xml
public User postUser(User user);
@POST
@Path("/postUser/{id}") //POST请求 传递一个id字符串
public User postUser(@PathParam(value = "id") String id);
}
在浏览器中输入http://localhost:8888/provider/userService/testget 就可以访问这个方法了
可以在实体类上加注解 改变 返回json或xml节点的名字
@XmlRootElement //如果想要返回xml 格式的 必须要加 XmlRootElement和XmlAccessorType两个注解
@XmlAccessorType(XmlAccessType.FIELD)
public class User implements Serializable
{
private static final long serialVersionUID = 1L;
@NotNull //字段不能是空
private String id;
@XmlElement(name="username") //返回xml格式时候 节点名字是username
@JsonProperty("name") //{name:"张三"} //返回json格式时候 节点名字是name
@NotNull
@Size(min = 6, max = 50) //字符串长度最小6个 最大50个
private String name;
public User() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
http://localhost:8888/provider/userService/getUser.json 返回的是json格式
http://localhost:8888/provider/userService/getUser.xml 返回的是xml格式
http://localhost:8888/provider/userService/getUser 什么都不加默认返回json格式
3、dubbo kryo 序列化
dubbo xml中配置 加入
<!-- kryo实现序列化 -->
<dubbo:protocolname="dubbo"serialization="kryo"optimizer="xiaozhou.utils.SerializationOptimizerImpl"/>
自己实现SerializationOptimizer接口 把要序列化的类注册到kryo里面
public class SerializationOptimizerImpl implements SerializationOptimizer {
public Collection<Class> getSerializableClasses() {
List<Class> classes = new LinkedList<Class>();
//这里可以把所有需要进行序列化的类进行添加
classes.add(User.class);
classes.add(Simple.class);
return classes;
}
}
User 和 Simple 实体类就不需要实现 Serializable 接口了
- Dubbo和Dubbox简单使用
- dubbo/dubbox 和SpringMVC 使用
- Dubbox 和Dubbo 为何选择
- dubbo,dubbox
- dubbox的使用和安装
- dubbo、dubbox坑集合
- Dubbo扩展:Dubbox
- Dubbox的介绍和简单示例
- Dubbox的介绍和简单示例
- Dubbo--简单介绍和使用(Simple)
- dubbox 2.8.4的配置和使用
- dubbox 2.8.4的配置和使用
- dubbox 2.8.4的配置和使用
- dubbox 2.8.4的配置和使用
- dubbo/dubbox部署资料收集
- dubbo/dubbox(一)源码编译
- Dubbo简单配置使用
- DUBBO简单使用
- 批量修改文件名
- cookie与session
- 跌跌撞撞
- [python]matplotlib的快速学习
- GBK,UTF-8,和ISO8859-1之间的编码与解码
- Dubbo和Dubbox简单使用
- Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题)
- 琐碎BFS/DFS
- 微信开发内置浏览器JS自动关闭当前页面回到微信对话窗口
- Boolan C++设计模式 第一周笔记
- ViewPager+Fragment
- Java数组的三种初始化方式
- 如何在window上把你的项目提交到github
- mybatis