Spring-boot集成Dubbo(直连模式)
Spring-boot+Dubbo(直连模式)Demo这里应该有很多人会问,直连模式(什么鬼啊),一般情况下我们进行微服务开发时,都是通过zookeeper等注册中心来实现服务的提供和引用的,那直连模式没啥用啊!其实不然,直连模式大有用处,当你要验证服务是否连通或者验证服务是否成功时,直连模式可以大大节省时间,不需要每台服务器的去配zookeeper的环境了.第一步:先搭建项目的结构我们都知...
·
Spring-boot+Dubbo(直连模式)Demo
这里应该有很多人会问,直连模式(什么鬼啊),一般情况下我们进行微服务开发时,都是通过zookeeper等注册中心来实现服务的提供和引用的,那直连模式没啥用啊!其实不然,直连模式大有用处,当你要验证服务是否连通或者验证服务是否成功时,直连模式可以大大节省时间,不需要每台服务器的去配zookeeper的环境了.
第一步:先搭建项目的结构
我们都知道dubbo是rpc框架,他是由服务提供者,服务消费者及注册中心组成一个最基本的结构,所以我们需要3个模块(因为我们采用直连,所以注册中心可以略过)
首先:idea中File -> new -> project -> Spring Initializr -> next -> Group+Artifact -> next…一直next下去即可,好了一个工程的外壳算是好了
然后添加另外3个模块
第一个模块:provider
选中刚建的项目工程,右键 -> new -> module(模块) -> Spring Initializr -> next Group+Artifact -> next…一直next下去即可,一个provider模块就搭建好了
第二个模块:consumer,与provider一致,这里便不再阐述,注:Artifact名称需要更改成consumer
第三个模块:api,与上述一致,不在阐述
why?,想必很多人都有疑问吧,第三个模块不是应该注册中心(registry)吗?因为我们采用直连模式,所以这里不需要注册中心,否则是4个模块,而api是干嘛的呢?这里名字随意,我只是根据他的功能取得名字,为了让功能更清晰,更好的解耦合,我把接口和一些common类(共用的方法)都放在api中.
附上我的项目结构图
第二步:开始撸代码
首先:引入需要的依赖
api:只做接口和common类提供模块,所以不需要任何依赖
provider:作为服务提供者,需要dubbo相关的依赖及接口api的依赖
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>com.hongsi.study</groupId>
<artifactId>api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
consumer:作为服务消费者,与provider一致
然后:在api中编写接口
接口-HelloWorld
package com.hongsi.study.api.service;
/**
* @author mjs
* @date 2019-11-26 17:38:00
* @des 服务提供接口
*/
public interface HelloWorld {
/**
* sayHello
* @param message
* @return
*/
String sayHello(String message);
}
在provider中编写接口实现类,启动类及dubbo配置
接口实现类-HelloWorldImpl,注意@Service要用dubbo提供的
package com.hongsi.study.provider.serviceimpl;
import com.hongsi.study.api.service.HelloWorld;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
/**
* @author mjs
* @date 2019-11-26 17:40:06
* @des 接口实现
*/
@Component //@Component注解用来注册bean
@Service //@Service注意要用dubbo的,不要jdk的,用来注册服务的
public class HelloWorldImpl implements HelloWorld {
/**
* 重写sayHello方法
* @param message
* @return
*/
@Override
public String sayHello(String message) {
return "api-sayHello:"+message;
}
}
provider的dubbo配置
application.properties文件的编写(.yml文件也可)
dubbo.registry.address=N/A
dubbo.application.name=provider
dubbo.scan.base-packages=com.t3go.study.provider.serviceimpl
第一行的配置指:不使用注册中心
第二行的配置指:给当前的dubbo应用取个名字,便于识别
第三行的配置指:扫描带@Service注解的包
provider的启动类编写(注意:在dubbo中配置过了包扫描,这里可以不加@DubboComponentScan)
package com.hongsi.study.provider;
import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Component;
@DubboComponentScan(basePackages = "com.hongsi.study.provider.serviceimpl")
@EnableDubboConfig
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
在consumer中编写测试方法,启动类及dubbo配置
测试方法-HelloController,注意这里引用bean要用@Refence(订阅服务)
package com.hongsi.study.consumer.controller;
import com.t3go.study.api.service.HelloWorld;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
/**
* @author mjs
* @date 2019-11-26 17:54:00
* @des 测试服务是否成功
*/
@Controller
public class HelloController {
/**
* url:因为没有注册中心所以,消费者这里直接连接到服务提供者,
* dubbo默认端口号为20880,可在服务提供者配置文件中修改
*/
@Reference(url = "dubbo://localhost:20880")
private HelloWorld helloWorld;
public void HelloWorld(String message){
System.out.println(helloWorld.sayHello(message));
}
}
consumer的dubbo配置
dubbo.application.name=consumer
consumer的启动类编写
package com.t3go.study.consumer;
import com.t3go.study.consumer.controller.HelloController;
import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@EnableDubboConfig
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
ConfigurableApplicationContext cac =
SpringApplication.run(ConsumerApplication.class, args); //获得springboot的容器,和spring差不多
HelloController qsc = (HelloController)cac.getBean("helloController");
qsc.HelloWorld("应该成功了吧!");
}
}
第三步:测试
依次启动provider,consumer中的启动类.如下图,成功
provider
consumer
恭喜你,直连成功!!!
更多推荐
已为社区贡献1条内容
所有评论(0)