1.架構
2.提供者配置
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!--指定當前服務的名字,不要與別的服務同名--> <dubbo:application name="dubbo-server-provider"/> <!--指定注冊中心位置--> <dubbo:registry address="zookeeper://192.168.10.132:2181"/> <!--指定通信規則(協議/端口)--> <dubbo:protocol name="dubbo" port="10000"/> <!--暴露服務 ref:指向服務真正的實現對象--> <dubbo:service interface="com.wj.UserService" ref="userServiceImpl"/> <!--服務實現--> <bean id="userServiceImpl" class="com.wj.service.impl.UserServiceImpl"/> </beans>
service實現:
注意實體類需要實現Serializable接口,否則會報錯,因為遠程調用過程有序列化和反序列化過程。
public class UserServiceImpl implements UserService { @Override public List<User> getAll() { User user1 = new User(1, "張三", 12, "北京"); User user2 = new User(2, "李四", 13, "北京"); return Arrays.asList(user1, user2); } }
Main方法:
public class ProviderMain { public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); context.start(); System.in.read(); } }
3.消費方配置
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!--消費者服務名--> <dubbo:application name="dubbo-server-consumer"/> <!--注冊中心地址--> <dubbo:registry address="zookeeper://192.168.10.132:2181"/> <!--聲明需要遠程調用的遠程服務接口,生成遠程服務代理--> <dubbo:reference interface="com.wj.UserService" id="userServiceImpl"/> <context:component-scan base-package="com.wj"/> </beans>
消費者類:
@Controller public class UserController { @Autowired UserService userService; public List<User> getAll(){ return userService.getAll(); } }
Main方法:
public class ConsumerMain { public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserController bean = context.getBean(UserController.class); List<User> users = bean.getAll(); for (User user : users) { System.out.println(user); } System.in.read(); } }
4.分別運行兩個main方法
消費方打印結果:
dubbo admin上服務調用關系: