由于最近项目要用到dubbo+zookeeper。所以就在网上找了一些例子来看,试着自己搭建了一个项目,并放到了服务器上,大家有兴趣可以访问。这篇文章主要记录项目搭建以及部署过程中踩过的坑,希望能帮到你。。。
项目结构如下:
项目是idea新建一个简单springboot项目,然后在这个项目基础上新建两个module项目:
springboot-dubbo-provider项目:
pom文件:
4.0.0
com.wty.DubboWty
dubboclient
0.0.1-SNAPSHOT
jar
dubboclient
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.2.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
com.alibaba
dubbo
2.4.10
spring
org.springframework
org.apache.zookeeper
zookeeper
3.4.6
slf4j-log4j12
org.slf4j
com.github.sgroschupf
zkclient
0.1
org.springframework.boot
spring-boot-maven-plugin
exec
注:这里有个坑,就是最后打包的时候,必须加上
exec
,如果不加,本地跑是没有问题的,但是打包发布服务的时候就有问题了,具体什么意思,可以看这篇文章:
https://blog.csdn.net/guduyishuai/article/details/60968728
接口类:
public interface SayHello {
String sayHello(String name);
}
实现类:
@Service
public class SayHelloImpl implements SayHello{
@Override
public String sayHello(String name) {
System.out.println("service 被调用了");
return "Hello "+name;
}
}
项目resources目录下新建dubbo-provider.xml配置文件:
启动类加上注解
@ImportResource(value = {"classpath:dubbo-provider.xml"})扫描配置文件:
@SpringBootApplication
@ImportResource(value = {"classpath:dubbo-provider.xml"})
public class SpringbootDubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDubboProviderApplication.class, args);
}
}
springboot-dubbo-consumer项目:
pom文件:
4.0.0
com.wty.dubbo
springboot-dubbo-consumer
0.0.1-SNAPSHOT
jar
springboot-dubbo-consumer
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.2.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
com.wty.dubbo
springboot-dubbo-provider
0.0.1-SNAPSHOT
com.alibaba
dubbo
2.4.10
spring
org.springframework
org.apache.zookeeper
zookeeper
3.4.6
slf4j-log4j12
org.slf4j
com.github.sgroschupf
zkclient
0.1
org.springframework.boot
spring-boot-maven-plugin
SayHelloController类:
@RestController
public class SayHelloController {
@Autowired
SayService sayService;
@RequestMapping("/hello")
public String say(@RequestParam("name") String name) {
System.out.println("name:" +name);
return sayService.say(name);
}
}
SayService类:
@Component
public class SayService {
@Resource
private SayHello sayHello;
public String say (String name) {
System.out.println("服务层"+name);
String s= sayHello.sayHello(name);
return s;
}
}
注:这里有个坑,就是@Reference注解千万不能用,用了就报错。后来改用@Resource就不报错了。
具体两者之间差异自行百度。
项目resources目录下新建dubbo-consumer.xml配置文件:
启动类:
@SpringBootApplication
@ImportResource("classpath:dubbo-consumer.xml")
public class SpringbootDubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDubboConsumerApplication.class, args);
}
}
注:因为是两个项目同时启动,所以要改一下项目启动端口号。这个很简单,在项目application.properties里面加上一行代码:
server.port=8012 就可以了。建议两个项目都改一下,不要和其他项目冲突。
现在项目基本搭建完成,只要你配置的zookeeper服务器正常可以访问,那么这个项目就肯定没有问题。启动的时候先启动provider,再启动consumer就行。
接下来说一下打包部署的事,打包的时候provider项目要install到本地仓库中去,因为加了
部署的时候部署可依赖jar包就可以了。然后package consumer项目的时候provider项目必须时启动状态,要不然打包也是不成功的。把这两个jar包打包成功后就可以上传服务器启动了。这里还要注意一点就是启动的时候不要java -jar 这样启动一个再启动另一个的话第一个项目会停掉,建议使用后台启动命令
nohup java -jar wty-0.0.1-SNAPSHOT.jar > wty.log 2>&1 & 后台启动 日志打印到wty.log文件中 返回进程号
这个时候就可以访问了。。。这是我的项目,可以访问的:
http://wxxcxxx.top:8012/hello?name="你的名字”
代码上传到github欢迎讨论:
https://github.com/yiTian66/dubboclient