49 lines
2.2 KiB
Markdown
49 lines
2.2 KiB
Markdown
# emqx_resource
|
|
|
|
The `emqx_resource` is a behavior that manages configuration specs and runtime states
|
|
for resources like mysql or redis backends.
|
|
|
|
It is intended to be used by the emqx_bridges and all other resources that need CRUD operations
|
|
to their configs, and need to initialize the states when creating.
|
|
|
|
There can be foreign references between resource instances via resource-id.
|
|
So they may find each other via this Id.
|
|
|
|
The main idea of the emqx resource is to put all the `general` code in a common lib, including
|
|
the config operations (like config validation, config dump back to files), and the state management.
|
|
And we put all the `specific` codes to the callback modules.
|
|
|
|
## Try it out
|
|
|
|
$ ./demo.sh
|
|
Eshell V11.1.8 (abort with ^G)
|
|
1> == the demo log tracer <<"log_tracer_clientid_shawn">> started.
|
|
config: #{<<"config">> =>
|
|
#{<<"bulk">> => <<"10KB">>,<<"cache_log_dir">> => <<"/tmp">>,
|
|
<<"condition">> => #{<<"clientid">> => <<"abc">>},
|
|
<<"level">> => <<"debug">>},
|
|
<<"id">> => <<"log_tracer_clientid_shawn">>,
|
|
<<"resource_type">> => <<"log_tracer">>}
|
|
1> emqx_resource_instance:health_check(<<"log_tracer_clientid_shawn">>).
|
|
== the demo log tracer <<"log_tracer_clientid_shawn">> is working well
|
|
state: #{health_checked => 1,logger_handler_id => abc}
|
|
ok
|
|
|
|
2> emqx_resource_instance:health_check(<<"log_tracer_clientid_shawn">>).
|
|
== the demo log tracer <<"log_tracer_clientid_shawn">> is working well
|
|
state: #{health_checked => 2,logger_handler_id => abc}
|
|
ok
|
|
|
|
3> emqx_resource_instance:query(<<"log_tracer_clientid_shawn">>, get_log).
|
|
== the demo log tracer <<"log_tracer_clientid_shawn">> received request: get_log
|
|
state: #{health_checked => 2,logger_handler_id => abc}
|
|
"this is a demo log messages..."
|
|
|
|
4> emqx_resource_instance:remove(<<"log_tracer_clientid_shawn">>).
|
|
== the demo log tracer <<"log_tracer_clientid_shawn">> stopped.
|
|
state: #{health_checked => 0,logger_handler_id => abc}
|
|
ok
|
|
|
|
5> emqx_resource_instance:query(<<"log_tracer_clientid_shawn">>, get_log).
|
|
** exception error: {get_instance,{<<"log_tracer_clientid_shawn">>,not_found}}
|