虽然Spring Boot可以无缝的和Spring cloud对接。但还是想试下Spring Boot + Dubbo怎么玩
添加Dubbo的依赖关系
根据Dubbo的官网介绍
https://github.com/apache/incubator-dubbo-spring-boot-project
需要添加依赖如下:
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.1.0</version>
</dependency>
###配置文件
按照文档,设置的配置问价如下,zk作为注册中心。
server:
port: 8083
spring:
profiles: dev
logging:
level: debug
path: D:/log/
#dubbo注册部分
dubbo:
scan:
#将这些包下面的Dubbo相关注解扫描到容器中
base-packages: cn.com.boostarp.service
application:
id: dubbo-provider-demo
name: dubbo-provider-demo
protocol:
name: dubbo
#dubbo注册地址
registry:
id: zk_address
#注册地址
address: localhost:2181;localhost:2182;localhost:2183
#使用的协议
protocol: zookeeper
timeout: 6000
对外提供的服务
对外提供的服务包路径应当包含与YML配置的路径下面
package cn.com.boostarp.service;
import java.util.Map;
public interface ProviderService {
Map<String, Object> getMsg() throws Exception;
}
对应的实现
package cn.com.boostarp.service.impl;
import cn.com.boostarp.service.ProviderService;
import com.alibaba.dubbo.config.annotation.Service;
import java.util.HashMap;
import java.util.Map;
//这个Service注解是Dubbo提供的
@Service
public class ProviderServiceImpl implements ProviderService {
@Override
public Map<String, Object> getMsg() throws Exception {
Map<String, Object> listMap = new HashMap<String, Object>(5);
listMap.put("f", "1");
listMap.put("g", "1");
return listMap;
}
}
启动
最后一步在启动生产者的时候,重启后,tomcat会自动停止。最后在看Dubbo的版本是2.0.1。估计是Dubbo版本太低的缘故,所以需要自己手动引入高版本的Dubbo模块,修改配置文件如下:需要排除 dubbo-spring-boot-starter 中依赖的2.0.1版本,然后再重新引入2.6.1版本。
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.1.0</version>
<exclusions>
<exclusion>
<artifactId>com.alibaba</artifactId>
<groupId>dubbo</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 重新引入2.6.1 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.1</version>
</dependency>
重新启动后,就能将服务注册上去。
测试:invoke cn.com.boostarp.service.ProviderService.getMsg()。发现消息转换错误.
添加fastJSON依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
添加响应的消息转换器
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
/**
* {@inheritDoc}
* <p>This implementation is empty.
*
* @param converters
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
//定义一个json消息转换对象
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
//添加配置信息
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
//2-1 处理中文乱码问题
List<MediaType> fastMediaTypes = new ArrayList<>();
fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
fastConverter.setSupportedMediaTypes(fastMediaTypes);
//3、在convert中添加配置信息
fastConverter.setFastJsonConfig(fastJsonConfig);
//4、将convert添加到converters中
//HttpMessageConverter<?> converter = fastConverter;
converters.add(fastConverter);
}
}
至此,对应的服务就注册到zk中心了。