【21天转型微服务】day5实操手册<br /> or '\n' !!!指令千万条,精准第一条!!!

举报
JaneConan 发表于 2019/03/17 14:23:24 2019/03/17
1w+ 4 2
【摘要】 主要分享一下微服务day5的基本操作及关键点

序言

day4 看到有朋友写了

直达链接 

https://bbs.huaweicloud.com/blogs/5fac241847a511e9bd5a7ca23e93a891

那让我们一起来看看今天的痛点吧~

指令千万条,精准第一条

WechatIMG1060.jpeg

资源准备

Demo下载:

点击下载Demo-Day5.zip

点击下载Demo-Day5-Homework.zip

一、还原Maven项目

这里提示大家用Demo-Day5.zip自己改

点击下载Demo-Day5.zip

如何还原已经说过多次了,请参考之前的分享

二、在Eclipse中执行mvn clean package(痛点分享)

验证微服务配置优先级关系

首先确保自己的工程已经还原,可运行,并且改过了provider服务的pom文件

就是指导手册中的【provider服务的pom文件中加上复制依赖包和打可执行jar包的插件配置


[执行mvn clean package,在target目录下可以看到打好的jar包和对应的lib目录。实际 部署到执行环境的时候需要把jar包和lib目录同时复制过去。]

这句,不少朋友看到后,云里雾里


咱们可以在eclipse中实现

1、在Maven项目或者pom.xml上右键——>Run As ——>“Maven Build...”或者Run Configuration——>“Maven Build”


屏幕快照 2019-03-17 14.16.32.png


2、在“Goals”输入框中输入:clean package -X


屏幕快照 2019-03-17 14.21.43.png    

3、查看打好的包

屏幕快照 2019-03-17 14.22.58.png

附   mvn命令若干:

  • mvn -h,不会用时,可寻求帮助。

  • mvn clean compile,将.java类编译为.class文件;

  • mvn clean test, 执行单元测试。

  • 本质上,还是执行了一个完整的生命周期,

  • clean:clean, resources:resources, compiler:compile, resources:testResources, compiler:testCompile

  • mvn clean package,进行打包。

  • mvn clean install –Dmaven.test.skip

  • mvn clean install,将某jar包安装到maven本地仓库中。

  • mvn archetype:generate,快速的搭建项目骨架,输入一些groupId/artifactId/version等信息,由mvn插件自动生成一些必要的依赖和项目骨架。


打包完成之后

在命令行中执行java jar helloworld-provider-0.0.1-SNAPSHOT.jar,启动服务。

屏幕快照 2019-03-17 14.28.01.png

跑啊跑.....

屏幕快照 2019-03-17 14.29.15.png

这时同时启动consumer和provider服务后


【通过consumer调用该provider服务的sayHello方法,此时返回的前缀是Hello】


屏幕快照 2019-03-17 16.08.10.png


然后在控制台用【Control + C】停止jar包的服务

3、 在jar包所在目录下放置一份microservice.yaml配置文件,内容如下

hello:
sayHelloPrefix: "Hello(from disk file)"

重新启动provider服务的jar包,此时得到的应答如下

屏幕快照 2019-03-17 16.12.45.png

然后在控制台用【Control + C】停止jar包的服务

4、 设置环境变量hello_sayHelloPrefix=Hello(fromEnv),再次启动服务

set hello_sayHelloPrefix=Hello(fromEnv)

嗯,然后在Mac上不认?

屏幕快照 2019-03-17 16.18.01.png

对,那是因为指令不对,【指令千万条,精准第一条】

Mac上设置环境变量,需要用

export hello_sayHelloPrefix=Hello(fromEnv)

但...

屏幕快照 2019-03-17 16.28.00.png

嘿嘿,还是感谢华为云老师但指点,少一个单引号号【'】

export hello_sayHelloPrefix='Hello(fromEnv)'

屏幕快照 2019-03-17 16.29.50.png

可以了,再次运行jar包

此时调用sayHello方法得到的应答如下


屏幕快照 2019-03-17 16.30.32.png

给配置项增加回调方法

1、在provider服务的HelloService类中增加一个sayHelloPrefix配置项的回调,使其在配置项被刷新时打印一行日志

别忘了加import引用

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger LOGGER = LoggerFactory.getLogger(HelloService.class);

private DynamicStringProperty sayHelloPrefix = DynamicPropertyFactory
	      .getInstance().getStringProperty("hello.sayHelloPrefix", ""
	          , notifyConfigRefreshed());

private Runnable notifyConfigRefreshed() {
	    return () -> LOGGER.info("config[hello.sayHelloPrefix] changed to [{}]!", sayHelloPrefix.getValue());
	  }	

屏幕快照 2019-03-17 16.40.53.png

2、 启动服务,在provider服务的动态配置页面增加hello.sayHelloPrefix的配置

我们在华为云但CSE管理控制台中进行配置

屏幕快照 2019-03-17 16.44.35.png屏幕快照 2019-03-17 16.44.05.png

添加新的配置信息

配置项
hello.sayHelloPrefix
值:

Hello(fromCC)

屏幕快照 2019-03-17 16.47.33.png

点击确定之前先确认【provider】服务在运行

屏幕快照 2019-03-17 16.49.16.png

provider服务实例从配置中心刷新配置项后,就会触发回调方法打印日志

屏幕快照 2019-03-17 16.55.16.png

启用和配置 accesslog

1、 开启accesslog功能

这个地址是说明

Accesslog功能的说明文档

https://docs.servicecomb.io/java-chassis/zh_CN/build-provider/access-log-configuration.html

开启accesslog需要在microservice.yaml文件中做如下配置(这里使用了自定义的日志格式,没有用默认配置):

注意是在provider服务工程中但microservice.yaml文件

2、 配置accesslog日志打印配置

默认的accesslog是单独打印到一个access.log日志文件中的。这里我们为了实验观察的方便,

provider项目的resources/config目录下放置一份log4j.properties配置文件,覆盖默认的配置,令accesslog的内容合并到普通业务日志中输出。

点击下载icon_rar.gifconfig.zip

屏幕快照 2019-03-17 17.07.55.png

3、 启动服务,调用接口,可以看到日志中打印了accesslog

WechatIMG1061.jpeg

    附件下载

  • config.zip 1.27KB 下载次数:19
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(4

抱歉,系统识别当前为高风险访问,暂不支持该操作
  • 作者头像

    jean_chan2019/03/17 14:56:021楼举报回复

    [ERROR] Error executing Maven.
    [ERROR] The specified user settings file does not exist: F:\21bigdata\Demo-Day2-Homework\helloworld-provider
  • 作者头像

    BitM2019/03/17 15:04:552楼举报回复

    accesslog好像出不来,log4j配置有问题?你的会提示[ERROR] Can not output merged.log4j.properties,because can not write to directory of file这个错误么?
    • 作者头像

      yhs00922019/03/18 09:37:50举报回复

      这个是正常的哦,CSEJavaSDK会在启动的时候将各个位置(包括jar包内和位于classpath的磁盘目录)的log4j配置都加载并合并成一份真正生效的配置文件。然后它会尝试把这份合并后的log4j配置输出到优先级最高的配置文件所在的目录,方便检查和调试。
      如果优先级最高的配置文件在可写磁盘目录里,那么文件就输出出去了。但如果是在jar包等不可写位置,就会打印这么一行日志。
      建议你去看看ServiceComb-Java-Chassis,也就是CSEJavaSDK开源部分的代码,来了解一下 : )
    • 作者头像

      木子10032021/05/08 04:47:17举报回复

      @yhs0092 请问一下,有没有方法可以解决?

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。