springboot整合dubbo
整合springboot与dubbo,最合适的资料是从官网入手。dubbo官网:http://dubbo.apache.org/en-us/index.html。由官网下的github首页,可以找到springboot与dubbo整合的github地址:https://github.com/apache/incubator-dubbo-spring-boot-project 。
一、生产者
搭建dubbo需要使用注册中心,一般使用zookeeper,在此不做说明。在spring官网生成spingboot的demo之后,需要在porm.xml添加如下依赖:
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
在application.properties文件中添加如下信息:
# Base packages to scan Dubbo Components (e.g., @Service, @Reference)
#dubbo服务提供者的包,服务提供者是具体的服务的实现,需要添加@Serivce或者@Reference标签,且该注解是dubbo的注解非spring的
dubbo.scan.basePackages = com.cxn.demo.services
# Dubbo Config properties
## ApplicationConfig Bean
dubbo.application.id = myProvider
dubbo.application.name = myProvider
## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 12345
## RegistryConfig Bean
dubbo.registry.id = my-registry
dubbo.registry.address = zookeeper://127.0.0.1:2181
定义一个简单的接口BookService,并且实现该接口:
package com.cxn.demo.interfaces;
import java.util.List;
public interface BookService {
public List<String> listBooks();
}
import java.util.ArrayList;
import java.util.List;
@Service
public class BookServiceImpl implements BookService {
@Override
public List<String> listBooks() {
ArrayList<String> result = new ArrayList<>();
result.add("碧血剑");
return result;
}
}
至于启动类,则不需要做任何修改,保持原样即可:
package com.cxn.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
启动后,可以看到日志中有如下信息,则代表配置正确且注册成功。
二、消费者
消费者的porm.xml文件引入相同的依赖,application.properties文件略有不同,有些信息可以不用引入(比如dubbo端口就不需要了):
# Spring boot application
spring.application.name = dubbo-consumer-demo
server.port = 8080
management.port = 8081
# Dubbo Config properties
## ApplicationConfig Bean
dubbo.application.id = dubbo-consumer-demo
dubbo.application.name = dubbo-consumer-demo
## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.registry.address = zookeeper://127.0.0.1:2181
将BookService接口进行引入,并且在使用到dubbo服务的地方,用@Reference进行引入,比如我写了个controller,在controller使用到了这个dubbo服务:
package com.cxn.demo;
import com.alibaba.dubbo.config.annotation.Reference;
import com.cxn.demo.interfaces.BookService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class HelloController {
@Reference(check = false,mock = "com.cxn.demo.BookServiceMock")
private BookService bookService;
@GetMapping("/hello")
public String sayHello(){
List<String> strings = bookService.listBooks();
return bookService.listBooks().toString();
}
}
此处还使用了服务降级,将mock值设置为true,并且在用BookServiceMock类实现了BookService的降级业务处理类,当服务不可用时,会使用该指定的Mock类进行处理;此处我还设置了校验为false,使得即使provider没有启动起来,也能正常启动consumer:
package com.cxn.demo.interfaces;
import java.util.ArrayList;
import java.util.List;
public class BookServiceMock implements BookService {
@Override
public List<String> listBooks() {
ArrayList<String> strings = new ArrayList<>();
strings.add("我就是个测试");
return strings;
}
}
如果启动的时候看到如下信息,则注册成功: