代码 sie-snest-rabbit-mq-master.zip

App sie-snest-rabbitmq-v1.0.0.RELEASE.jar

基础使用

添加配置

不推荐使用,因为修改配置需要重新环境。
application.properties 配置文件添加以下配置

rabbitmq.host=127.0.0.1
rabbitmq.port=5672
rabbitmq.username=admin
rabbitmq.password=password
建议作为APP的配置信息在配置中心进行配置。
例:在app.json里配置
"appConfig": {
      "host": {
        "value": "",
        "desc": "rabbitmq的host",
        "required": false
      },
      "port": {
        "value": "",
        "desc": "rabbitmq的port",
        "required": false
      },
      "username": {
        "value": "",
        "desc": "rabbitmq的username",
        "required": false
      },
      "password": {
        "value": "",
        "desc": "rabbitmq的password",
        "required": false
      }
}

添加 rabbitmq 应用

可以通过应用市场安装 base-rabbitmq 应用与业务应用在同一个容器内。
注意:如果业务应用容器没有base-rabbitmq,调用时会出现系统异常。

添加应用依赖

在需要使用 RabbitMQ 的 app 中添加依赖,修改 app.json , 在 dependencies 添加 base-rabbitmq

{
  "name": "rabbitmq-test",
  "displayName": "RabbitMQ测试",
  "dependencies": ["base-rabbitmq"],
  "events":{
    "startUp": [
      "RabbitMqTest::registerConsumer"
    ]
  }
}

编写测试代码

@Model(displayName = "RabbitMQ 测试")
public class RabbitMqTest extends BaseModel<RabbitMqTest> {

    private static final Logger LOGGER = LoggerFactory.getLogger(RabbitMqTest.class);
    private static final String EXCHANGE_NAME = "rabbitmq-test.topic";
    private static final String QUEUE_NAME = "rabbitmq-test.changeName.queue";
    private static final String ROUTING_KEY = "rabbitmq-test.changeName";
    public static final String RABBIT_MQ_MODEL = "RabbitMQ";

    @Property(displayName = "名称")
    private String name;

    public void registerConsumer() {
        getMeta().get(RABBIT_MQ_MODEL).call("declareExchange", EXCHANGE_NAME, "topic");
        getMeta().get(RABBIT_MQ_MODEL).call("declareQueue", QUEUE_NAME);
        getMeta().get(RABBIT_MQ_MODEL).call("queueBind", EXCHANGE_NAME, ROUTING_KEY, QUEUE_NAME);
        getMeta().get(RABBIT_MQ_MODEL).call("registerConsumer", QUEUE_NAME, "RabbitMqTest", "handleChangeNameEvent");
    }

    @MethodService(description = "发送事件")
    public void publishChangeNameEvent() {
        ChangeNameEvent event = new ChangeNameEvent("1", "Mary");
        getMeta().get(RABBIT_MQ_MODEL).call("send", EXCHANGE_NAME, ROUTING_KEY, JSON.toJSONString(event));
    }

    @MethodService(description = "处理事件")
    public void handleChangeNameEvent(String event) {
        LOGGER.debug("接收到消息:{}", event);
    }
}

方法说明

  • registerConsumer:用于作为启动事件,启动的时候声明交换机、声明队列、绑定队列、注册消费者
  • publishChangeNameEvent:用于发送事件
  • handleChangeNameEvent:业务中处理事件的逻辑

添加启动事件

app.json 中添加启动事件,在应用启动的时候注册消费者。

{
  "name": "rabbitmq-test",
  "displayName": "RabbitMQ测试",
  "dependencies": ["base-rabbitmq"],
  "events":{
    "startUp": [
      "RabbitMqTest::registerConsumer"
    ]
  }
}