据我所知@LoadBalanced,Rest模板应基于使用Ribbon的客户端负载平衡,并检查Eureka服务器是否将服务名称解析为主机/端口.
有什么用@RibbonClient?是否支持没有Eureka的原生Ribbon Client LB,并在配置时支持Eureka Discover DiscoveryEnabledNIWSServerList?
我有一个带有Zipkin库的客户端应用程序,其中包含spring application.properties中的配置.
camel.zipkin.host-name=hawkular-apm-server.com
camel.zipkin.port=443
camel.zipkin.include-message-body-streams=true
Run Code Online (Sandbox Code Playgroud)
Maven依赖
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-zipkin-starter</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
可以从本地计算机访问hawkular apm服务器控制台.
但是,当调用客户端应用程序中暴露的其余api时,会记录zipkin跟踪,但不会在hawkular apm服务器上收集它们.
04:31:55.632 [http-nio-0.0.0.0-8080-exec-1] INFO o.a.c.c.s.CamelHttpTransportServlet - Initialized CamelHttpTransportServlet[name=CamelServlet, contextPath=]
04:31:55.668 [http-nio-0.0.0.0-8080-exec-1] DEBUG org.apache.camel.zipkin.ZipkinTracer - clientRequest [service=MyCamelClient, traceId=-5541987202080201726, spanId=-5541987202080201726]
04:31:55.672 [http-nio-0.0.0.0-8080-exec-1] DEBUG org.apache.camel.zipkin.ZipkinTracer - serverRequest [service=MyCamel, traceId=-5541987202080201726, spanId=-5541987202080201726]
04:31:55.676 [http-nio-0.0.0.0-8080-exec-1] DEBUG org.apache.camel.zipkin.ZipkinTracer - serverResponse[service=MyCamel, traceId=-5541987202080201726, spanId=-5541987202080201726]
04:31:55.677 [http-nio-0.0.0.0-8080-exec-1] DEBUG org.apache.camel.zipkin.ZipkinTracer - clientResponse[service=MyCamelClient, traceId=-5541987202080201726, spanId=-5541987202080201726]
04:31:55.758 [pool-1-thread-1] WARN o.a.t.transport.TIOStreamTransport - Error closing output stream.
java.net.SocketException: Socket closed
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:118)
at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at java.io.FilterOutputStream.close(FilterOutputStream.java:158)
at org.apache.thrift.transport.TIOStreamTransport.close(TIOStreamTransport.java:110) …Run Code Online (Sandbox Code Playgroud) 我正在使用"CamelHttpTransportServlet"公开一个休息服务,它接收订单并放在jms队列中.代码在快乐路径上正常工作并返回200响应.我编写了Processor来验证输入JSON,并根据输入设置http_response_code.
问题是 - 对于无效请求,虽然设置了故障响应代码 - 400,但流程继续到下一个路由并将数据推送到队列,而不是将400响应发送回调用应用程序.
rest("/ordermanagement")
.post("/order").to("direct:checkInput");
from("direct:checkInput")
.process(new Processor() {
@Override
public void process(final Exchange exchange) throws Exception {
String requestBody = exchange.getIn().getBody(String.class);
if(requestBody == "" || requestBody== null) {
exchange.getIn().setBody("{ "error": Bad Request}");
exchange.getIn().setHeader(Exchange.CONTENT_TYPE, "application/json");
exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 400);
}
}
})
.to("direct:sendToQ");
from("direct:sendToQ")
.to("jms:queue:orderReceiver")
.log("Sent to JMS");
Run Code Online (Sandbox Code Playgroud)
有人可以建议这里缺少什么,并尽可能提供样品吗?
试图实现onException方法:
rest("/ordermanagement")
.post("/order").to("direct:checkInput");
onException(CustomException.class).handled(true)
.setHeader(Exchange.HTTP_RESPONSE_CODE, code)
.setBody(jsonObject);
from("direct:checkInput")
.process(new Processor() {
@Override
public void process(final Exchange exchange) throws Exception {
String requestBody = exchange.getIn().getBody(String.class);
if(requestBody == "" || requestBody== null) …Run Code Online (Sandbox Code Playgroud) 我的 Springboot 应用程序工作正常,连接到数据源。对于 Junit,我通过排除 DatasourceAutoConfiguration、DataSourceTransactionManagerConfiguration、HibernateJpaAutoConfiguration 类来禁用数据源的自动配置,以避免 SpringBoot 自动配置数据源。
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.2.5.RELEASE</version>
<dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>8.2.2.jre8</version>
<dependency>
Run Code Online (Sandbox Code Playgroud)
主班
@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan({"com.basepackage"})
public class SampleClass{
psvm(){
SpringApplication.run(SampleClass.class,args);
}
}
Run Code Online (Sandbox Code Playgroud)
Juni测试班
@RunWith(SpringRunner.class)
@SpringBootTest(classes=SampleClass.class)
@AutoConfigureMockMvc
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class, DataSourceTransactionManagerConfiguration.class, HibernateJpaAutoConfiguration.class})
public class SampleControllerTest {
@MockBean
private SampleService service;
@Test
public void fetchUsers() {
Mockito.when(service.retrieveUsers().thenReturn(new SampleResponse());
}
Run Code Online (Sandbox Code Playgroud)
}
在 mvn 测试中,测试脚本已运行但失败,因为 Springboot 未自动配置 SampleRepository bean(可能是因为排除了 Datasource 和 HibernateJpa 自动配置类)
错误
Caused by UnsatisfiedDependencyException: Error creating bean with name ServiceDAOImpl, …Run Code Online (Sandbox Code Playgroud)