1.Feign集成hystrix
feign默认不继承,如果需要得手动设置。
1.1加依赖yhstrix、actuator
1.2在yml中配置
#feign启用hystrix
feign:
hystrix:
enabled: true
#暴露端点
management:
endpoints:
web:
exposure:
include: hystrix.stream
1.3启动类上加注解
输入首字母都会有提示

1.4在声明式接口上加 降级的类名
@FeignClient(name="item-service",fallback = ItemClientFB.class)

然后创建这个类,并实现对应的接口,重写其中的方法。

1.5启动的时候,如果没加依赖。会报这个错误

2.订单调用商品、用户
2.1加依赖:feign、hystrix、actuator
2.2yml中启用hystrix和暴露hystrix.stream
启用hystrix
feign:
hystrix:
enabled:true
暴露hystrix.stream
m.e.w.e.i然后又提示
management:
endpoints:
web:
exposure:
include: hystrix.stream
2.3在启动类上加注解
@EnableFeignClients、@EnableCircuitBreaker
2.4添加商品和用户的声明式客户端接口

然后创建降级类并让降级类实现对应接口

@Component
public class ItemClientFB implements ItemClient{
@Override
public JsonResult<List<Item>> getItems(String orderId) {
//模拟缓存数据
if(Math.random()<0.5){
ArrayList<Item> list = new ArrayList<>();
list.add(new Item(1,"缓存商品1",1));
list.add(new Item(2,"缓存商品2",1));
list.add(new Item(3,"缓存商品3",1));
list.add(new Item(4,"缓存商品4",1));
list.add(new Item(5,"缓存商品5",4));
return JsonResult.ok().data(list);
}
return JsonResult.err().msg("调用商品失败");
}
@Override
public JsonResult descreaseNumber(List<Item> items) {
return JsonResult.err().msg("调用商品失败");
}
}

@Component
public class UserClientFB implements UserClient{
@Override
public JsonResult<User> getUser(Integer userId) {
if (Math.random() < 0.5) {
User user = new User(8,"缓存用户名","很聪明吗");
return JsonResult.ok().data(user);
}
return JsonResult.err().msg("调用用户失败");
}
@Override
public JsonResult addScore(Integer userId, Integer score) {
return JsonResult.err().msg("调用用户失败");
}
}

@Service
@Slf4j
public class OrderServiceImpl implements OrderService {
@Qualifier("cn.tedu.sp04.feign.ItemClient")
@Autowired
private ItemClient itemClient;
@Qualifier("cn.tedu.sp04.feign.UserClient")
@Autowired
private UserClient userClient;
@Override
public Order getOrder(String orderId) {
log.info("获取订单:orderId="+orderId);
//远程调用商品服务,获取商品列表
JsonResult<List<Item>> items = itemClient.getItems(orderId);
//远程调用用户服务,获取用户列表
JsonResult<User> user = userClient.getUser(8);
//写死订单数据
Order order = new Order();
order.setId(orderId);
order.setUser(user.getData());
order.setItems(items.getData());
return order;
}
@Override
public void saveOrder(Order order) {
log.info("保存订单:"+order);
//远程调用商品服务,减少商品库存
//itemClient.descreaseNumber(items);
itemClient.descreaseNumber(order.getItems());
//远程调用用户服务,增加用户积分
userClient.addScore(order.getUser().getId(),100);
}
}
3.Turbin
聚合监控数据
从多台服务器抓取监控数据,进行聚合
hystrix dashboard可以从turbine抓取聚合后的数据
3.1步骤
1.新建项目sp10-turbin
2.加依赖:turbin、eureka client
3.yml配置:
1.聚合的服务id:order-service,id2,id3...
2.聚合数据名,默认名是default
4.启动类上加注解@EnableTurbin
5.http://localhost:5001/turbine.stream
3.1.1
新建项目、加依赖省略
spring:
application:
name: turbin
server:
port: 5001
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka,http://eureka2:2002/eureka
turbine:
app-config: order-service
#聚合后数据名字.注意格式:new String("default")
cluster-name-expression: new String("default")
3.1.2访问如图



4 RabbitMQ(信息服务)很重要
1.克隆centos-7-1908(关机后在克隆)
2.设置ip
./ip-static
192.168.64.140
ipconfig(我的不管用)或
ip addr
3.用monaxterm连接140
4.将离线安装文件(rabbitmq-install)上传到root目录,我的在D:\天翼云盘下载\课前资料\亿发课前资料-2003\亿发课前资料\亿发课前资料\rabbitmq\rabbitmq-install
4.1关机后克隆,一路默认


4.2

用monaxterm连接上虚拟机后,把安装文件传到root目录,直接拖进去就行

到rabbitmq-install进行安装
rpm -ivh *.rpm

启动rabbitmq服务器
# 设置服务,开机自动启动
systemctl enable rabbitmq-server
# 启动服务
systemctl start rabbitmq-server
4.3rabbitmq管理界面
启用管理界面
# 开启管理界面插件
rabbitmq-plugins enable rabbitmq_management
# 防火墙打开 15672 管理端口
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload
重启rabbitmq服务
systemctl restart rabbitmq-server
访问
访问服务器的`15672`端口,例如:
http://192.168.64.140:15672

4.4添加用户
# 添加用户
rabbitmqctl add_user admin admin
# 新用户设置用户为超级管理员
rabbitmqctl set_user_tags admin administrator
4.5### 设置访问权限


**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。