服务启动:
1 public static void main( String[] args ) {
2 ApplicationContext context = new AnnotationConfigApplicationContext(SimpleSpringConfiguration.class);
3 final Vertx vertx = Vertx.vertx();
4 vertx.deployVerticle(new SpringSimpleVerticle(context));
5 vertx.deployVerticle(new ServerVerticle());
6 }
EventBus接受给Service:
1 public class SpringSimpleVerticle extends AbstractVerticle {
2
3 public static final String ALL_PRODUCTS_ADDRESS = "example.all.products";
4
5
6 private final ObjectMapper mapper = new ObjectMapper();
7 private final ProductService service;
8
9 public SpringSimpleVerticle(final ApplicationContext context) {
10
11 service = (ProductService) context.getBean("productService");
12
13 }
14
15 private Handler<Message<String>> allProductsHandler(ProductService service, String name) {
16 return ms2g -> vertx.<String>executeBlocking(future -> {
17 try {
18 future.complete(mapper.writeValueAsString(service.getAllProducts(ms2g.body())));
19 } catch (JsonProcessingException e) {
20 System.out.println("Failed to serialize result");
21 future.fail(e);
22 }
23 },
24 result -> {
25 if (result.succeeded()) {
26 ms2g.reply(result.result());
27 } else {
28 ms2g.reply(result.cause().toString());
29 }
30 });
31 }
32
33 @Override
34 public void start() throws Exception {
35 super.start();
36
37 System.out.println("<<<<<<<<<<<<<<<<<<<<<<< CONSUMER >>>>>>>>>>>>>>>>>>>>>>>>>");
38 vertx.eventBus().<String>consumer(ALL_PRODUCTS_ADDRESS).handler(allProductsHandler(service, "message"));
39
40 }
41 }
端口监听:
1 @Service
2 public class ProductService {
3
4 @Autowired
5 private ProductRepository repo;
6
7 public List<Product> getAllProducts(String productId) {
8 System.out.println("productid : " + productId);
9 return repo.findAll();
10 }
11
12 public void getProduct(String productId) {
13 System.out.println("productid : " + productId);
14 }
15
16 }
结论:
DML操作基本都是类似的做法,但是观念的改变其实很大,传统烟囱的方式=》基于消息、事件的方式转移