定义的Service(Api和Xml方式)

  1. public interface UserService {
  2. String getUsername();
  3. }
  4. public class UserServiceImpl implements UserService {
  5. @Override
  6. public String getUsername() {
  7. System.out.println("调用getUsername=========");
  8. return "pine";
  9. }
  10. }

1.直接调用Api

生产者

  1. public class ProviderApi {
  2. public static void main(String[] args) throws IOException {
  3. ServiceConfig<UserService> config = new ServiceConfig<>();
  4. config.setApplication(new ApplicationConfig("api-provider"));
  5. config.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
  6. config.setInterface(UserService.class);
  7. config.setRef(new UserServiceImpl());
  8. config.export();
  9. System.out.println("first-dubbo-provider is running.");
  10. //等待控制台输入
  11. System.in.read();
  12. }
  13. }

消费者

  1. public class ConsumerApi {
  2. public static void main(String[] args) {
  3. ReferenceConfig<UserService> reference = new ReferenceConfig<>();
  4. reference.setApplication(new ApplicationConfig("api-consumer"));
  5. reference.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
  6. reference.setInterface(UserService.class);
  7. UserService orderService = reference.get();
  8. String username = orderService.getUsername();
  9. System.out.println("result: " + username);
  10. }
  11. }

2.xml配置文件配置

生产者

  1. public class ProviderXml {
  2. public static void main(String[] args) {
  3. ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:spring/dubbo-server.xml");
  4. ctx.start();
  5. System.out.println("---------dubbo启动成功--------");
  6. // 保证服务一直开着
  7. synchronized (ProviderXml.class) {
  8. try {
  9. ProviderXml.class.wait();
  10. } catch (Throwable e) {
  11. }
  12. }
  13. }
  14. }

dubbo-server.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-3.1.xsd
  10. http://code.alibabatech.com/schema/dubbo
  11. http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  12. <!--全局配置-->
  13. <dubbo:provider timeout="3000" />
  14. <!-- 服务提供方应用名称, 方便用于依赖跟踪 -->
  15. <dubbo:application name="xml-server" />
  16. <!-- 使用本地zookeeper作为注册中心 -->
  17. <dubbo:registry address="zookeeper://127.0.0.1:2181" />
  18. <!--name指示使用什么协议监听端口:dubbo/rmi/rest-->
  19. <dubbo:protocol name="dubbo" port="20882" />
  20. <!-- 通过xml方式配置为bean, 让spring托管和实例化 -->
  21. <bean id="userService" class="com.pine.service.provider.UserServiceImpl"/>
  22. <!-- 声明服务暴露的接口,并暴露服务 -->
  23. <dubbo:service interface="com.pine.service.provider.UserService" ref="userService" />
  24. </beans>

消费者

  1. public class ConsumerXml {
  2. public static void main(String[] args) {
  3. ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:spring/dubbo-client.xml");
  4. ctx.start();
  5. System.out.println("---------dubbo启动成功--------");
  6. // get remote service proxy
  7. UserService orderService = (UserService) ctx.getBean("userService");
  8. String username = orderService.getUsername();
  9. System.out.println(" ConsumerXml result: " + username);
  10. }
  11. }

dubbo-client.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://code.alibabatech.com/schema/dubbo
  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  9. <dubbo:application name="xml-clint" />
  10. <dubbo:registry address="zookeeper://127.0.0.1:2181" />
  11. <dubbo:reference id="userService" interface="com.pine.service.provider.UserService" />
  12. </beans>

3.注解方式

生产者

  1. public class ProviderPro {
  2. public static void main(String[] args) throws Exception {
  3. AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ProviderConfiguration.class);
  4. context.start();
  5. System.out.println("dubbo 启动成功");
  6. System.in.read();
  7. }
  8. @Configuration
  9. @EnableDubbo(scanBasePackages = "com.pine.service.provider")
  10. @PropertySource("classpath:/dubbo-provider.properties")
  11. static class ProviderConfiguration {
  12. }
  13. }

provider包

  1. public interface UserService {
  2. String getUsername();
  3. }
  4. //这里的@Service是dubbo的service
  5. import com.alibaba.dubbo.config.annotation.Service;
  6. @Service
  7. public class UserServiceImpl implements UserService {
  8. @Override
  9. public String getUsername() {
  10. System.out.println("调用getUsername=========");
  11. return "pine";
  12. }
  13. }

dubbo-provider.properties

  1. dubbo.application.name=pro-provider
  2. dubbo.registry.address=zookeeper://127.0.0.1:2181
  3. dubbo.protocol.name=dubbo
  4. dubbo.protocol.port=20883

消费者

  1. public class ConsumerPro {
  2. public static void main(String[] args) {
  3. AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConsumerConfiguration.class);
  4. context.start();
  5. ConsumerUserServiceImpl serviceConsumer = context.getBean(ConsumerUserServiceImpl.class);
  6. String username = serviceConsumer.getUsername();
  7. System.out.println("result: " + username);
  8. }
  9. @Configuration
  10. @EnableDubbo(scanBasePackages = "com.pine.service.consumer")
  11. @PropertySource("classpath:/dubbo-consumer.properties")
  12. @ComponentScan(value = {"com.pine.service.consumer"})
  13. static class ConsumerConfiguration {
  14. }
  15. }

consumer包

  1. import com.alibaba.dubbo.config.annotation.Reference;
  2. import com.pine.service.provider.UserService;
  3. import org.springframework.stereotype.Component;
  4. @Component("annotatedConsumer")
  5. public class ConsumerUserServiceImpl {
  6. @Reference
  7. private UserService userService;
  8. public String getUsername(){
  9. System.out.println("调用到ConsumerUserServiceImpl.getUsername()");
  10. return userService.getUsername();
  11. }
  12. }

dubbo-consumer.properties

  1. dubbo.application.name=pro-consumer
  2. dubbo.registry.address=zookeeper://127.0.0.1:2181
  3. dubbo.consumer.timeout=3000