dubbo依赖服务

dubbo最亮点的功能就是解决跨项目的相互调用,最典型的案例模式即将service层注册成服务供controller模块调用即(controller -- service),但是在实际开发中,有可能service层还要依赖另一个service层才能实现功能,所以在这种情况下,一个service服务层是一个可以扮演双重角色的节点,它即是服务的提供者,又是服务的消费者(controller -- service1 -- service2 ... ...)

dubbo依赖服务_第1张图片
2017-05-21_151026.png

【案例】假设我们一个新的模块dependency要依赖helloWord案例的服务demo,即dependency服务service要依赖helloWord的service来完成实现,dependency的server既是服务也是消费
【编码实现】

【helloWord服务】
查看helloWord案例

【dependency服务】
接口:dubbo.dependency.provider.DependencyService.java

public interface DependencyService {

    public String dependency() throws Exception;
}

接口实现:dubbo.dependency.provider.impl.DependencyServiceImpl.java

/**
 * 
 * @author lvfang
 * 这种方式符合常规的开发方式
 * 实际开发规则:
 *          服务方用注解方式
 *                  注入bean:org.springframework.stereotype.Service
 *                  提供服务:com.alibaba.dubbo.config.annotation.Service
 *                      interfaceClass:依赖的类
 *                      protocol:提供的服务,这里是Dubbo服务,还有其他服务
 *                      retries:失败重启次数,一把为0
 *          消费方用xml方式
 *                  注入bean
 */
@Service("dependencyServiceImpl")//注入bean
@com.alibaba.dubbo.config.annotation.Service(
        interfaceClass=DependencyService.class,
        protocol={"dubbo"},
        retries=0)
public class DependencyServiceImpl implements DependencyService {
    
    @Autowired
    private SampleService sampleService;//这里要对另一个服务进行依赖

    @Override
    public String dependency() throws Exception {
        sampleService.sayHello("xiaojiang");
        System.out.println("假装模拟依赖调用了另一个已注册的服务");
        return "Dependency exec";
    }

}

服务测试:dubbo.dependency.test.Provider.java

public class Provider {

    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dependency-provider.xml"});
        context.start();
        
        System.out.println("服务已启动");
        System.in.read();//为保证服务一直开着,利用输入流阻塞来模拟,开发中,这些应该打jar包在服务器上运行
    }
}

服务配置文件:dependency-provider.xml



 
    
    
   
    
    
 
    
    
 
    
    
    
    
    
 

启动服务:
注意,这里这个服务有依赖服务,并且xml中检查服务的配置属性 check="true",所以一定要保证依赖服务已启动,反之如果是false则启动不会报错

启动依赖服务

dubbo依赖服务_第2张图片
2017-05-21_152813.png

启动服务

dubbo依赖服务_第3张图片
2017-05-21_152852.png
dubbo依赖服务_第4张图片
2017-05-21_152941.png

注意:以上服务以(服务用注解,消费用配置的方式完成)

dubbo依赖服务_第5张图片
![Uploading 2017-05-21_154059_680403.png . . .]
dubbo依赖服务_第6张图片
2017-05-21_154059.png

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

【dependencyConsumer】消费服务
接口:dubbo.dependency.provider.DependencyService.java

public interface DependencyService {

    public String dependency() throws Exception;
}

消费测试类:Consumer.java

public class Consumer {

    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dependency-consumer.xml"});
        context.start();
        
        DependencyService dependencyService = (DependencyService) context.getBean("dependencyService");//这里的id与consumer的配置对应
        
        System.out.println(dependencyService.dependency());
        
        System.in.read();
    }
}

xml配置:dependency-consumer.xml



 
    
    
 
    
    
 
    
    
 

启动测试

dubbo依赖服务_第7张图片
2017-05-21_153607.png

查看provider服务的控制台

dubbo依赖服务_第8张图片
2017-05-21_153709.png

你可能感兴趣的:(dubbo依赖服务)