赞
踩
集中地管理和维护配置文件
微服务启动时,从服务器获取配置文件
现在本地准备一个文件夹存放2,3,4的配置文件,再把文件夹放到 git 仓库
在 gitee 创建仓库
在 springcloud1 工程目录下,新建一个文件夹:config
把 2,3,4 的 application.yml 复制到 config 目录,并改名
创建本地仓库
double shift – 搜索 create git repository(有中文插件用汉字搜索)
选择 springcloud1 工程目录,设置成本地仓库
double shift – 搜索 commit
勾选所有文件、填写提交信息,然后点提交按钮
把本地仓库推送到远程仓库
double shift – 搜索 push
点 define remote 链接
粘贴远程仓库的地址,完成推送
新建 spring 模块:sp09-config
添加依赖
yml
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://gitee.com/shixumin/springclould1 #创建的git仓库地址
search-paths: config
server:
port: 6001
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
启动类注解:@EnableConfigServer
验证
http://localhost:6001/item-service/dev
http://localhost:6001/user-service/dev
http://localhost:6001/order-service/dev
把 2,3,4 的 application.yml 都注释掉
添加依赖: config client
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
添加新的配置文件: bootstrap.yml
#应用启动时才会执行 application.yml
#从配置中心下载配置,再使用下载的配置启动应用
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka,http://eureka2:2002/eureka
spring:
cloud:
config:
discovery:
enabled: true #
#2.从注册表获得config-server的地址
service-id: CONFIG-SERVER
#3.从config-server下载配置文件 user-service-dev.yml
name: user-service
profile: dev
http://localhost:6001/item-service/dev
http://localhost:6001/user-service/dev
http://localhost:6001/order-service/dev
更换仓库再测试
注意:先启动02的话 ,会连接默认配置中心 localhost:8888
# centos 7 禁用 NetworkManager 系统服务
systemctl stop NetworkManager
systemctl disable NetworkManager
# centos 8 开启 VMware 托管
nmcli n on
systemctl restart NetworkManager
rabbitmq-install 目录上传到 /root
cd rabbitmq-install
rpm -ivh *.rpm
消息服务、消息队列、消息中间件 Broker
常见的消息服务器:
./ip-static
ip: 192.168.64.140
ifconfig
systemctl restart docker
docker load -i rabbit-image.gz
docker images
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld #取消开机自启
# 重启 docker 系统服务
systemctl restart docker
配置管理员用户名和密码
mkdir /etc/rabbitmq
vim /etc/rabbitmq/rabbitmq.conf
# 添加两行配置:
default_user = admin
default_pass = admin
启动Rabbitmq
docker run -d --name rabbit
-p 5672:5672
-p 15672:15672
-v /etc/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
-e RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf
--restart=always
rabbitmq:management
访问管理控制台 http://192.168.64.140:15672
用户名密码是 admin
pom依赖
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.4.3</version>
</dependency>
</dependencies>
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Producer {
public static void main(String[] args) throws IOException, TimeoutException {
// 1.连接服务器
ConnectionFactory f = new ConnectionFactory();
f.setHost("192.168.64.140");
f.setPort(5672);//5672 收发消息端口 , 15672 管理控制台界面的端口
f.setUsername("admin");
f.setPassword("admin");
Connection con = f.newConnection();
//建立信道
Channel c = con.createChannel(); //通信新增
// 2.在服务器上创建一个队列 : helloworld
//如果队列在服务器上已存在,不会重复创建
/*
*参数:
* 第二个参数durable: 是否是持久队列
* 3 exclusive:是否是排他队列,独占队列
* 4 autoDelete:是否自动删除
* 5 arguments: 队列的其他属性
*/
c.queueDeclare("helloworld",false,false,false,null);
// 3.向helloworld队列发送消息
/*
1. "" 空串 默认的交换机
2. -routingKey: 对于默认交换机,路由键就是目标队列名称
* 3. -props: 其他参数,例如头信息
* 4. -body: 消息内容byte[]数组
*/
c.basicPublish("", "helloworld", null, "helloworld!".getBytes());
System.out.println("消息已发送");
c.close();
con.close();
}
}
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Consumer {
public static void main(String[] args) throws IOException, TimeoutException {
// 连接
// 1.连接服务器
ConnectionFactory f = new ConnectionFactory();
f.setHost("192.168.64.140");
f.setPort(5672);//5672 收发消息端口 , 15672 管理控制台界面的端口
f.setUsername("admin");
f.setPassword("admin");
Connection con = f.newConnection();
//建立信道
Channel c = con.createChannel(); //通信新增
// 2.在服务器上创建一个队列 : helloworld
//如果队列在服务器上已存在,不会重复创建
c.queueDeclare("helloworld",false,false,false,null);
// 3.创建回调对象
//DeliverCallback 处理消息
//方式1 new 匿名内部类
DeliverCallback deliverCallback = new DeliverCallback() {
@Override
public void handle(String s, Delivery message) throws IOException {
byte[] a = message.getBody();
s = new String(a);
System.out.println("收到:"+s);
}
};
//方式2 Lambda表达式
// DeliverCallback deliverCallback = (consumerTag, message) -> {
// byte[] a = message.getBody();
// String s = new String(a);
// System.out.println("收到:"+s);
// };
CancelCallback cancelCallback=consumerTag -> {};
// 4. 开始接受消息,把消息传递给一个回调对象进行处理
//第2个参数 autoAck: 是否自动确认
c.basicConsume("helloworld", true, deliverCallback, cancelCallback);
}
}
一个生产者,多个消费者,每个消费者获取到的消息唯一
http://localhost:6001/actuator
POST http://localhost:6001/actuator/bus-refresh
zipkin 可以收集链路跟踪数据,提供可视化的链路分析
java -jar zipkin-server-2.12.9-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.64.140:5672
java -jar zipkin-server-2.23.16-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.64.140:5672
修改以下微服务
sp02-item-service
sp03-user-service
sp04-order-service
sp11-zuul
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。