公司用到了dubbo拆分服务,开始补习dubbo的知识
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。
服务化首先需要把服务抽象为接口,然后使用dubbo把接口暴露出来
添加maven依赖
pom.xml
1 2 3 4 5
| <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency>
|
定义服务接口
DemoService.java :
1 2 3 4 5
| package com.alibaba.dubbo.demo;
public interface DemoService { String sayHello(String name); }
|
实现生产者接口
DemoServiceImpl.java
1 2 3 4 5 6 7 8
| package com.alibaba.dubbo.demo.provider; import com.alibaba.dubbo.demo.DemoService;
public class DemoServiceImpl implements DemoService { public String sayHello(String name) { return "Hello " + name; } }
|
暴露接口
dubbo-demo-consumer.xml
1 2 3 4 5 6 7 8 9 10 11
| <?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="demo-provider"/> <dubbo:registry address="multicast://224.5.6.7:1234"/> <dubbo:protocol name="dubbo" port="20880"/> <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService"/> <bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl"/> </beans>
|
开始运行
Provider.java
1 2 3 4 5 6 7 8 9 10 11
| import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Provider { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( new String[] {"META-INF/spring/dubbo-demo-provider.xml"}); context.start(); System.in.read(); } }
|
配置消费者
dubbo-demo-consumer.xml
1 2 3 4 5 6 7 8 9
| <?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="demo-consumer"/> <dubbo:registry address="multicast://224.5.6.7:1234"/> <dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService"/> </beans>
|
运行消费者
Consumer.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import com.alibaba.dubbo.demo.DemoService; import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Consumer { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( new String[]{"META-INF/spring/dubbo-demo-consumer.xml"}); context.start(); DemoService demoService = (DemoService) context.getBean("demoService"); String hello = demoService.sayHello("world"); System.out.println(hello); } }
|
具体代码官网上有,点击这里