前言
本章讲解使用注解配置Provider和Consumer的步骤
方法
1.概念
在当今注解化配置盛行的趋势下,Dubbo也作出了改变,适应了注解的配置方式。
注意:需要 Dubbo 2.6.3及以上版本支持
2.Provider配置思路
1)创建provider的dubbo配置文件
内容如下:
# dubbo-provider.properties
dubbo.application.name=demo-provider
dubbo.registry.address=zookeeper://192.168.1.106:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
这其中的配置与我们xml文件中的配置一致。
2)创建provider配置类
package cn.edu.ccut.dubbo;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
@Configuration
@EnableDubbo(scanBasePackages = "cn.edu.ccut.dubbo")//允许该包下使用dubbo注解
@PropertySource("classpath:dubbo-provider.properties")//加载dubbo配置文件
public class ProviderConfig {
}
由于我们使用了PropertySource注解,需要在pom文件中引入如下依赖:
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>1.0.2</version>
</dependency>
3)修改Provider启动类
package cn.edu.ccut.dubbo;
import java.io.IOException;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Test {
public static void main(String[] args) throws IOException {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext (ProviderConfig.class);
context.start();
System.out.println("Provider started...");
System.in.read();
}
}
4)修改实现类
package cn.edu.ccut.dubbo;
import com.alibaba.dubbo.config.annotation.Service;
import cn.edu.ccut.dubbo.DemoService;
@Service
public class DemoServiceImpl implements DemoService {
@Override
public String getString(String str) {
// TODO Auto-generated method stub
return "指定的字符串为:"+str;
}
}
注意:实现类加入的注解为dubbo的Service注解,并不是Spring的注解!
启动Provider:
3.Consumer配置思路
1)创建consumerr的dubbo配置文件
内容如下:
# dubbo-consumer.properties
dubbo.application.name=annotation-consumer
dubbo.registry.address=zookeeper://192.168.1.106:2181
dubbo.consumer.timeout=3000
2)创建consumer配置类
package cn.edu.ccut.dubbo;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
@Configuration
@EnableDubbo(scanBasePackages = "cn.edu.ccut.dubbo")//允许该包下使用dubbo注解
@PropertySource("classpath:dubbo-consumer.properties")//加载dubbo配置文件
@ComponentScan(value = {"cn.edu.ccut.dubbo"})//Spring注解扫描
public class ConsumerConfig {
}
由于我们使用了PropertySource注解,需要在pom文件中引入如下依赖:
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>1.0.2</version>
</dependency>
3)配置一个类AnnotationAction,用它来引用我们的DemoService
package cn.edu.ccut.dubbo;
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Reference;
@Component("annotationAction")
public class AnnotationAction {
@Reference
private DemoService demoService;
public String doSayMsg(String name) {
return demoService.getString(name);
}
}
其中的@Reference注解表示将注册中心暴露的接口注入
4)修改Consumer启动类
package cn.edu.ccut.dubbo;
import java.io.IOException;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Test {
public static void main(String[] args) throws IOException {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConsumerConfig.class);
//调用接口方法
AnnotationAction action = context.getBean("annotationAction",AnnotationAction.class);
System.out.println(action.doSayMsg("略略略"));
}
}
启动之前,我们需要确保Provider正常启动
观察效果: