springboot使用注解即可配置dubbo服务,本次做的案例,使用的注册中心是zookeeper。
首先创建服务接口,单独的建立一个项目,用于其他项目做依赖。
使用的工具是STS,官方地址:http://spring.io/tools/sts,有插件也有整合好eclipse的完整版
该项目是个maven 普通项目,新建一个服务接口
package com.xupx.test.service;
/**
* dubbo接口测试服务
* @author xupx
*
*/
public interface HelloServer {
public String sayHello(String name);
}
接着在新建一个provider项目
1.增加dubbo依赖
<dependency>
<groupId>com.alibaba.spring.boot
</groupId>
<artifactId>dubbo-spring-boot-starter
</artifactId>
<version>2.0.0
</version>
</dependency>
2.增加服务接口依赖
<dependency>
<groupId>com.proxy</groupId>
<artifactId>springboot-dubbo-api</artifactId>
<version>1.0.0</version>
</dependency>
在provider中新建一个实现类,发布服务
package com.xupx.serviceimpl;
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;
import com.xupx.test.service.HelloServer;
/**
* dubbo服务提供者
* @author peixinxu
*
*/
@Component
//interfaceClass:服务类,timeout:超时时间,version:版本号,group:分组
//假设同一个接口被多个服务提供者实现,并且同时发布,这时候可以根据版本号或者group分组信息取得你需要的服务
@Service(interfaceClass=HelloServer.class,timeout=3000,version="1.0",group="group1")
public class HelloServiceImpl implements HelloServer {
@Override
public String sayHello(String name) {
return "hello " + name;
}
}
在启动springboot启动类上增加注解
package com.xupx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
@SpringBootApplication
@EnableDubboConfiguration //Enable Dubbo (for provider or consumer) for spring boot application
public class SpringbootDubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDubboProviderApplication.class, args);
}
}
接这在配置文件中增加配置
spring.application.name = dubbo-provider-demo
spring.dubbo.server=true
spring.dubbo.registry=N/A
是否
好了,接下来就是服务消费者了,和服务者提供者一样,依赖dubbo以及服务项目
启动类也一样加上
@EnableDubboConfiguration 注解
区别在与引用服务时:
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.dubbo.config.annotation.Reference;
import com.xupx.test.service.HelloServer;
/**
* 服务消费者测试类
* @author peixinxu
*
*/
@RestController
public class HelloController {
@Reference(version="1.0",group="group1",url="dubbo://127.0.0.1:20880")//注意这里的版本号和分组要和服务提供者配置的一样
private HelloServer helloServer;
@GetMapping("/hi")
public String sayHello(String name) {
return helloServer.sayHello(name);
}
}
注意:记得改端口号,别提供者和消费者的端口号冲突了。。。这个错误有点。。。。。
接下来启动zookeeper,provider,consumer
成功图片,留作纪念
注意几个地方,一定要配置应用名称否则会出异常
java.lang.IllegalStateException: ApplicationConfig.application == null