pom.xml依赖引入
统一定义版本号
spring-cloud-alibaba
version:2.2.5.RELEASE
spring-cloud版本号
version:2020.0.1
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-bootstrap -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
yml配置
--yml配置--
###配置文件###
spring:
application:
name: 定义项目名称
cloud:
nacos:
discovery:
enabled: false #是否启用服务发现
config:
server-addr: http://ip地址:端口(部署的naoc服务的地址)
namespace: 7a2f39fb-8279-4560-b88f-ecefbe7a039c
#应用配置: ${spring.application.name}.file-extension
file-extension: yml
#附加配置--附加引入其他yml配置
extension-configs:
- dataId: jdbc.yml
- dataId: redis.yml
- dataId: third-util-config.yml
- dataId: dubbo.yml
分环境部署
方式1:(基于spring的分环境配置方式)
###按环境区分配置中心###
---
spring:
config:
activate:
on-profile: dev
cloud:
nacos:
config:
server-addr: http://ip地址:8848
namespace: 7a2f39fb-8279-4560-b88f-ecefbe7a039c
---
spring:
config:
activate:
on-profile: uat
cloud:
nacos:
config:
server-addr: http://ip地址:8848
namespace: eec62b5c-9eac-4612-bbab-97553fa08cf4
---
spring:
config:
activate:
on-profile: prd
cloud:
nacos:
config:
server-addr: http://ip地址:8848
namespace: 7a2f39fb-8279-4560-b88f-ecefbe7a039c
#关键字是on-profile,这个就把环境参数先定义好,到时候启动的时候例如
-Dspring.profiles.active=prd 就相当于激活了prd下面的参数配置
方式2:基于maven参数+yml方式
yml配置文件
这个使用符合@参数@
env表示maven配置里面定义的属性,这里使用
<properties>
<env>dev</env>
<!--nacos配置namespace-->
<nacos-namespace>051a75fd-1840-41f2-9756-33c3c77e56b6</nacos-namespace>
<nacos-url>http://xxx:8848</nacos-url>
</properties>
spring:
profiles:
active: @env@
spring:
application:
name: manage
cloud:
nacos:
config:
namespace: @nacos-namespace@ #这个通env原理一样
server-addr: @nacos-url@
file-extension: yml
extension-configs:
- dataId: jdbc.yml
- dataId: redis.yml
- dataId: application.yml
- dataId: dubbo.yml
- dataId: rabbitmq.yml
- dataId: mongo.yml
- dataId: ysy.yml
refresh: true
#${spring.profiles.active}就相当于使用yml的属性spring.profiles.active=dev,因为dev是从maven配置里面属性env读出来的
logging:
file:
name: /var/log/logs/${spring.profiles.active}/manage/debug.log
jdbc.yml配置
#数据源
spring:
datasource:
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
username: 数据账号
password: 密码
url: jdbc:mysql://ip地址:3316/数据库名称?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&tinyInt1isBit=false
redis.yml配置
Spring:
redis:
host: 连接ip地址
port: 6392端口号
password: 连接密码
##连接池(其他参数配置)
lettuce:
pool:
##最大连接数
max-active: 8
#最大和最小空闲连接
max-idle: 4
min-idle: 0
##连接的最大等待阻塞的时间
max-wait: 10000
dubbo.yml配置 基于远程RPC调用
dubbo:
registry:
#协议类型,这里使用的注册中心是nacos
protocol: nacos
#注册地址---ip地址:端口号?namespace=nacos命名空间的ID
address: ip地址:8848?namespace=eec62b5c-9eac-4612-bbab-97553fa08cf4
#服务提供者协议
protocol:
name: dubbo #协议名称
threadpool: cached #线程池类型(fixed,cached,limited,eager)
corethreads: 10 #初始线程数
threads: 200 #最大线程数
accesslog: false #不记录dubbo访问日志
accepts: 1000 #最大服务连接数
charset: UTF-8 #序列化编码
dispatcher: message
port: 20880
#配置服务提供方参数,服务消费方默认使用服务提供方的配置
provider:
protocol: dubbo #协议名称
timeout: 10000 #超时时间(ms)
retries: 2 #重试次数
loadbalance: random #负载均衡算法
官方地址参考:https://nacos.io/zh-cn/docs/use-nacos-with-dubbo.html
如何开启dubbo
在程序启动类添加注解
@EnableDubbo
pom.xml依赖加入
dubbo依赖支持
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
服务提供者和服务消费者及使用
【服务端--提供者】
import org.apache.dubbo.config.annotation.DubboService;
@DubboService//声明这是一个dubbo服务,到时候会注册到服务注册中心去
@Service
public class xxxService implements IxxxRpcService {
}
【客户端-使用者】
跟引用service一样
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@DubboReference(check = false)
private IxxxRpcService xxxService;
//这个是spring其他bean
@Autowired
private IJobService jobService;
@Override
public void doMethod() {
//直接调用接口里面的方法就好了。这个是是基于dubbo的RPC远程调用
FaceInfoVo faceInfo = xxxService.getFaceInfo();
}
}
总结:
1、服务提供者,需要加上注解@DubboService 在接口实现类
2、服务消费者,在使用的地方加上注解@DubboReference,表示引用某个dubbo服务
nacos运行效果