如何使用连接器公共属性,即Mule 4中Mule 3的服务覆盖

问题描述

我们希望在Mule 4中一次将来自JMS MQ(入站)的所有消息作为一个组进行处理。 为了在Mule 3中实现此功能,我们在JMS连接器中使用了自定义java类和服务替代。如何在Mule 4中实现相同的功能

pub struct Node<T: FooTrait> {
    items: Vec<*mut T>,}

impl <T: FooTrait<T=T>> Node<T> {
    pub fn new() ->Node<T> {
        Node {
            items: Default::default(),}
    }

    pub fn insert(&mut self,item: &mut T) {
        let handle = Handle::new(self,0);
        item.set_handle(handle);
        self.items.push(item);
    }

    pub fn remove(&mut self,index: u16) {
        self.items.swap_remove(index as usize);
    }
}

pub struct Handle<X:FooTrait> {
    node: *mut Node<X>,index: u16,}

impl <T:FooTrait>  Handle<T> {
    fn new(node: &mut Node<T>,i: u16) -> Handle<T> {
        Handle {
            node: node,index: i
        }
    }
}

impl <X:FooTrait> Drop for Handle<X>  {
    fn drop(&mut self) {
        unsafe {
            let m = self.node.as_mut().unwrap();
            m.remove(self.index); // <<----- ???
        }
    }
}

pub trait  FooTrait {
    type T : FooTrait;
    fn set_handle(&mut self,h: Handle<Self::T>);
}

解决方法

Mule 4中没有服务替代。您需要完全共享您的自定义代码所执行的操作,以查看Mule 4中是否具有等效功能。如果只是为了聚合消息,您可能会发现{{ 3}}有助于实现此目的,而无需自定义代码。