小程序跳转小程序

重点需要在配置文件app.json 添加 属性navigateToMiniProgramAppIdList:[‘appid1′,’appid2’]最低10个

官方文档链接:https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html

一、navigateToMiniProgram

官方文档链接:https://developers.weixin.qq.com/miniprogram/dev/api/wx.navigateToMiniProgram.html


wx.navigateToMiniProgram({
  appId: '',//小程序appid
  path: 'page/index/index?id=123',//跳转关联小程序app.json配置里面的地址
  extraData: {//需要传递给目标小程序的数据,目标小程序可在 App.onLaunch(),App.onShow() 中获取到这份数据。
    foo: 'bar'
  },
 //**重点**要打开的小程序版本,有效值 develop(开发版),trial(体验版),release(正式版) 
  envVersion: 'develop',
  success(res) {
    // 打开成功
  }
})

image.gif

二、navigator

官方文档链接:https://developers.weixin.qq.com/miniprogram/dev/component/navigator.html

appd-id:小程序appid
path:小程序路径
extra-data:跳转小程序携带的参数
version:当target="miniProgram"时有效,要打开的小程序版本,有效值 develop(开发版),trial(体验版),release(正式版),仅在当前小程序为开发版或体验版时此参数有效;如果当前小程序是正式版,则打开的小程序必定是正式版。
<navigator target="miniProgram" open-type="navigate" app-id="" path="" extra-data="" version="release">打开绑定的小程序</navigator>

作者:MicKing_9982
链接:https://www.jianshu.com/p/8a8746a00f84
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Spring WebFlux获取Request对象工具

3.1 WebFilter获取并保存

首先,在WebFilter中获取Request对象并保存,代码如下:

@Configuration@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)public class ReactiveRequestContextFilter implements WebFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {ServerHttpRequest request = exchange.getRequest();return chain.filter(exchange).subscriberContext(ctx -> ctx.put(ReactiveRequestContextHolder.CONTEXT_KEY, request));}}

ServerWebExchange中获取到ServerHttpRequest对象,再通过put方法把它放进Context里。

3.2 工具类Holder

实现一个工具类来提供静态方法,在Filter后的任何场景都可以使用:

public class ReactiveRequestContextHolder {public static final Class<ServerHttpRequest> CONTEXT_KEY = ServerHttpRequest.class; public static Mono<ServerHttpRequest> getRequest() {return Mono.subscriberContext().map(ctx -> ctx.get(CONTEXT_KEY));}}

3.3 在Controller中使用

我们尝试在Controller中使用ReactiveRequestContextHolder来获取Request

@RestControllerpublic class GetRequestController { @RequestMapping("/request")public Mono<String> getRequest() {return ReactiveRequestContextHolder.getRequest().map(request -> request.getHeaders().getFirst("user"));}}

上面方法获取了Request对象,然后再获取了Request中的Header

启动应用,测试如下:

$ curl http://localhost:8088/request -H 'user: pkslow'pkslow $ curl http://localhost:8088/request -H 'user: larry'larry $ curl http://localhost:8088/request -H 'user: www.pkslow.com'www.pkslow.com

可以成功获取请求头user

4 总结

以上就是如何在Spring WebFlux的任何地方获取Request对象的

dubbo输入参数的校验

dubbo的rest支持采用Java标准的bean validation annotation(JSR 303)来做输入校验http://beanvalidation.org/

为了和其他dubbo远程调用协议保持一致,在rest中作校验的annotation必须放在服务的接口上,例如:

public interface UserService {
   
    User getUser(@Min(value=1L, message="User ID must be greater than 1") Long id);
}

当然,在很多其他的bean validation的应用场景都是将annotation放到实现类而不是接口上。把annotation放在接口上至少有一个好处是,dubbo的客户端可以共享这个接口的信息,dubbo甚至不需要做远程调用,在本地就可以完成输入校验。

然后按照dubbo的标准方式在XML配置中打开验证:

<dubbo:service interface=xxx.UserService" ref="userService" protocol="rest" validation="true"/>

不要使用 dubbo.properties 文件配置,推荐使用对应 XML 配置

Dubbo 中所有的配置项都可以配置在 Spring 配置文件中,并且可以针对单个服务配置。

如完全不配置则使用 Dubbo 缺省值,详情请参考 Dubbo配置参考手册 中的说明。

dubbo.properties 中属性名与 XML 的对应关系

  1. 应用名 dubbo.application.name<dubbo:application name="myalibaba" >
  2. 注册中心地址 dubbo.registry.address<dubbo:registry address="11.22.33.44:9090" >
  3. 调用超时 dubbo.service.*.timeout可以在多个配置项设置超时 timeout,由上至下覆盖(即上面的优先)5,其它的参数(retriesloadbalanceactives等)的覆盖策略与 timeout 相同。示例如下:提供者端特定方法的配置<dubbo:service interface="com.alibaba.xxx.XxxService" > <dubbo:method name="findPerson" timeout="1000" /> </dubbo:service> 提供者端特定接口的配置<dubbo:service interface="com.alibaba.xxx.XxxService" timeout="200" />
  4. 服务提供者协议 dubbo.service.protocol、服务的监听端口 dubbo.service.server.port<dubbo:protocol name="dubbo" port="20880" />
  5. 服务线程池大小 dubbo.service.max.thread.threads.size<dubbo:protocol threads="100" />
  6. 消费者启动时,没有提供者是否抛异常 alibaba.intl.commons.dubbo.service.allow.no.provider<dubbo:reference interface="com.alibaba.xxx.XxxService" check="false" />

Dubbo 中的简单监控服务

监控中心也是一个标准的 Dubbo 服务,可以通过注册中心发现,也可以直连。

暴露一个简单监控中心服务到注册中心: (如果是用安装包,不需要自己写这个配置,如果是自己实现监控中心,则需要)

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    
   <!-- 当前应用信息配置 -->
   <dubbo:application name="simple-monitor" />
    
   <!-- 连接注册中心配置 -->
   <dubbo:registry address="127.0.0.1:9090" />
    
   <!-- 暴露服务协议配置 -->
   <dubbo:protocol port="7070" />
    
   <!-- 暴露服务配置 -->
   <dubbo:service interface="org.apache.dubbo.monitor.MonitorService" ref="monitorService" />
    
   <bean id="monitorService" class="org.apache.dubbo.monitor.simple.SimpleMonitorService" />
</beans>
通过注册中心发现监控中心服务:

<dubbo:monitor protocol="registry" />
或者在 dubbo.properties 配置:

dubbo.monitor.protocol=registry
暴露一个简单监控中心服务,但不注册到注册中心: (如果是用安装包,不需要自己写这个配置,如果是自己实现监控中心,则需要)

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    
    <!-- 当前应用信息配置 -->
    <dubbo:application name="simple-monitor" />
        
    <!-- 暴露服务协议配置 -->
    <dubbo:protocol port="7070" />
    
    <!-- 暴露服务配置 -->
    <dubbo:service interface="org.apache.dubbo.monitor.MonitorService" ref="monitorService" registry="N/A" />
    
    <bean id="monitorService" class="org.apache.dubbo.monitor.simple.SimpleMonitorService" />   
</beans>
直连监控中心服务

<dubbo:monitor address="dubbo://127.0.0.1:7070/org.apache.dubbo.monitor.MonitorService" />
或:

<dubbo:monitor address="127.0.0.1:7070" />
或者在 dubbo.properties 中配置:

dubbo.monitor.address=127.0.0.1:7070

dubbo监控配置推荐

  1. 使用固定端口暴露服务,而不要使用随机端口这样在注册中心推送有延迟的情况下,消费者通过缓存列表也能调用到原地址,保证调用成功。
  2. 使用 Dubbo Admin 监控注册中心上的服务提供方使用 Dubbo Admin 监控服务在注册中心上的状态,确保注册中心上有该服务的存在。
  3. 服务提供方可使用 Dubbo Qos 的 telnet 或 shell 监控项监控服务提供者端口状态:echo status | nc -i 1 20880 | grep OK | wc -l,其中的 20880 为服务端口
  4. 服务消费方可通过将服务强制转型为 EchoService,并调用 $echo() 测试该服务的提供者是可用如 assertEqauls(“OK”, ((EchoService)memberService).$echo(“OK”));